Przejdź do treści stopki
POMOC .NET

C# New (jak to działa dla programistów)

Operator new w C# jest wszechstronny, służy do wielu istotnych funkcji w języku. Od tworzenia obiektów po ukrywanie odziedziczonych członków, zrozumienie ich zastosowań jest kluczowe dla efektywnego rozwoju w C#. Ten przewodnik zgłębia różne zastosowania słowa kluczowego new, dostarczając jasnych przykładów ilustrujących jego moc i elastyczność. Później w tym przewodniku przyjrzymy się przeglądowi biblioteki IronPDF w IronSoftware.

Wstęp do tworzenia obiektów

Tworzenie obiektów to proces, w którym operator new tworzy instancje klasy lub struktury. W C# jest to głównie osiągnięte za pomocą słowa kluczowego new, które wywołuje konstruktor określonego typu i alokuje pamięć dla nowego obiektu.

Tworzenie instancji za pomocą new

Aby utworzyć instancję obiektu, operator new musi być później nazwą klasy i parą nawiasów. Jeśli klasa ma konstruktor przyjmujący parametry, w tych nawiasach muszą zostać podane argumenty.

public class Book
{
    public string Title { get; set; }

    public Book(string title)
    {
        Title = title;
    }
}

Book book = new Book("The C# Programming Language");
public class Book
{
    public string Title { get; set; }

    public Book(string title)
    {
        Title = title;
    }
}

Book book = new Book("The C# Programming Language");
Public Class Book
	Public Property Title() As String

	Public Sub New(ByVal title As String)
		Me.Title = title
	End Sub
End Class

Private book As New Book("The C# Programming Language")
$vbLabelText   $csharpLabel

Domyślne i bezparametrowe konstruktory

C# dostarcza domyślny konstruktor, jeśli w klasie nie zdefiniowano żadnych konstruktorów. Jednak gdy zdefiniowano konstruktor z parametrami, trzeba jawnie zadeklarować bezparametrowy konstruktor, jeśli jest potrzebny.

public class ExampleClass
{
    // Parameterless constructor
    public ExampleClass()
    {
        // Initialization code here
    }
}
public class ExampleClass
{
    // Parameterless constructor
    public ExampleClass()
    {
        // Initialization code here
    }
}
Public Class ExampleClass
	' Parameterless constructor
	Public Sub New()
		' Initialization code here
	End Sub
End Class
$vbLabelText   $csharpLabel

Zaawansowane techniki tworzenia obiektow

W C#, tworzenie obiektów to nie tylko instancjowanie klas; to brama do wykorzystywania potężnych funkcjonalności języka dla bardziej wydajnego, czytelnego i zwięzłego kodu. Tutaj badamy zaawansowane techniki, takie jak praca z tablicami, wykorzystanie typów i stosowanie inicjalizatorów obiektów, aby usprawnić swoje wysiłki w kodowaniu.

Tablice i kolekcje

Tworzenie tablic określonego typu tablicowego w C# to podstawowa umiejętność, ale to szczegóły podnoszą twoje umiejętności programistyczne. Używając słowa kluczowego new, można zainicjować tablice, określając ich typ i liczbę elementów, jakie powinny zawierać. To jest kluczowe do zarządzania kolekcjami zmiennych w uporządkowany sposób. Poza podstawowymi tablicami, new ułatwia tworzenie tablic wielowymiarowych i postrzępionych, obsługujących złożone struktury danych.

// Single-dimensional array
int[] numbers = new int[5]; // Initializes an array for 5 integers

// Multidimensional array
int[,] matrix = new int[3, 2]; // A 3x2 matrix

// Jagged array (an array of arrays)
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[4]; // First row has 4 columns
jaggedArray[1] = new int[5]; // Second row has 5 columns
jaggedArray[2] = new int[3]; // Third row has 3 columns
// Single-dimensional array
int[] numbers = new int[5]; // Initializes an array for 5 integers

// Multidimensional array
int[,] matrix = new int[3, 2]; // A 3x2 matrix

// Jagged array (an array of arrays)
int[][] jaggedArray = new int[3][];
jaggedArray[0] = new int[4]; // First row has 4 columns
jaggedArray[1] = new int[5]; // Second row has 5 columns
jaggedArray[2] = new int[3]; // Third row has 3 columns
' Single-dimensional array
Dim numbers(4) As Integer ' Initializes an array for 5 integers

' Multidimensional array
Dim matrix(2, 1) As Integer ' A 3x2 matrix

' Jagged array (an array of arrays)
Dim jaggedArray(2)() As Integer
jaggedArray(0) = New Integer(3){} ' First row has 4 columns
jaggedArray(1) = New Integer(4){} ' Second row has 5 columns
jaggedArray(2) = New Integer(2){} ' Third row has 3 columns
$vbLabelText   $csharpLabel

Typy anonimowe

Typy anonimowe błyszczą w scenariuszach wymagających tymczasowych struktur danych bez narzutu związanego z deklarowaniem formalnej klasy. Używając new ze składnią inicjalizatora właściwości, można tworzyć obiekty na bieżąco. Ta funkcja jest niezwykle przydatna w zapytaniach LINQ, gdzie potrzeba wybrania podzbioru właściwości z większego obiektu lub do szybkiego grupowania danych bez tworzenia konkretnego typu.

var person = new { Name = "Alice", Age = 30 };
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");

// In LINQ
var results = from p in people
              select new { p.Name, p.Age };
var person = new { Name = "Alice", Age = 30 };
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}");

// In LINQ
var results = from p in people
              select new { p.Name, p.Age };
Dim person = New With {
	Key .Name = "Alice",
	Key .Age = 30
}
Console.WriteLine($"Name: {person.Name}, Age: {person.Age}")

' In LINQ
Dim results = From p In people
	Select New With {
		Key p.Name,
		Key p.Age
	}
$vbLabelText   $csharpLabel

Inicjalizatory obiektów

Inicjalizator obiektu to wygoda składniowa, pozwalająca stworzyć instancję klasy i od razu ustawić jej właściwości bez wywoływania konstruktora z parametrami. To nie tylko sprawia, że kod jest bardziej czytelny, ale także zmniejsza prawdopodobieństwo błędów, eliminując potrzebę wielu konstruktorów dla różnych scenariuszy. Inicjalizatory obiektów są szczególnie przydatne przy pracy z zagnieżdżonymi obiektami, pozwalając ustalić tylko potrzebne właściwości.

public class Rectangle
{
    public int Width { get; set; }
    public int Height { get; set; }
    public Point Location { get; set; }
}

Rectangle rect = new Rectangle
{
    Width = 100,
    Height = 50,
    Location = new Point { X = 0, Y = 0 }
};
public class Rectangle
{
    public int Width { get; set; }
    public int Height { get; set; }
    public Point Location { get; set; }
}

Rectangle rect = new Rectangle
{
    Width = 100,
    Height = 50,
    Location = new Point { X = 0, Y = 0 }
};
Public Class Rectangle
	Public Property Width() As Integer
	Public Property Height() As Integer
	Public Property Location() As Point
End Class

Private rect As New Rectangle With {
	.Width = 100,
	.Height = 50,
	.Location = New Point With {
		.X = 0,
		.Y = 0
	}
}
$vbLabelText   $csharpLabel

Funkcje lokalne i wyrazenia lambda

C# wspiera funkcje lokalne i wyrażenia lambda, zwiększając elastyczność i zwięzłość kodu.

Funkcja lokalna

Funkcja lokalna to metoda zdefiniowana w zakresie innej metody, służy jako potężne narzędzie do organizowania kodu i kapsułkowania funkcjonalności.

public void PerformOperation()
{
    int LocalFunction(int x)
    {
        return x * x;
    }
    Console.WriteLine(LocalFunction(5)); // Output: 25
}
public void PerformOperation()
{
    int LocalFunction(int x)
    {
        return x * x;
    }
    Console.WriteLine(LocalFunction(5)); // Output: 25
}
Public Sub PerformOperation()
'INSTANT VB TODO TASK: Local functions are not converted by Instant VB:
'	int LocalFunction(int x)
'	{
'		Return x * x;
'	}
	Console.WriteLine(LocalFunction(5)) ' Output: 25
End Sub
$vbLabelText   $csharpLabel

Wyrażenia lambda

Wyrażenie lambda dostarcza zwięzły sposób na pisanie wyrażeń lub metod inline bez potrzeby jawnych typów delegatów.

Func<int, int> square = x => x * x;
Console.WriteLine(square(5)); // Output: 25
Func<int, int> square = x => x * x;
Console.WriteLine(square(5)); // Output: 25
Dim square As Func(Of Integer, Integer) = Function(x) x * x
Console.WriteLine(square(5)) ' Output: 25
$vbLabelText   $csharpLabel

Używanie 'new' w dziedziczeniu

W dziedziczeniu klas, new może ukrywać odziedziczonych członków, pozwalając klasom pochodnym wprowadzić członków o tej samej nazwie co ich bazowe klasy.

Ukrywanie odziedziczonych członków

Użycie new do ukrycia członka w klasie pochodnej nie nadpisuje tego samego członka; zamiast tego, wprowadza nowego członka, który jest odrębny od wersji klasy bazowej.

public class BaseClass
{
    public void Display()
    {
        Console.WriteLine("Base display");
    }
}

public class DerivedClass : BaseClass
{
    public new void Display()
    {
        Console.WriteLine("Derived display");
    }
}
public class BaseClass
{
    public void Display()
    {
        Console.WriteLine("Base display");
    }
}

public class DerivedClass : BaseClass
{
    public new void Display()
    {
        Console.WriteLine("Derived display");
    }
}
Public Class BaseClass
	Public Sub Display()
		Console.WriteLine("Base display")
	End Sub
End Class

Public Class DerivedClass
	Inherits BaseClass

	Public Shadows Sub Display()
		Console.WriteLine("Derived display")
	End Sub
End Class
$vbLabelText   $csharpLabel

Zrozumienie new z generykami

Generyki wprowadzają poziom abstrakcji w programowaniu C#, pozwalając projektować klasy, metody i interfejsy działające na typach ogólnych. W połączeniu ze słowem kluczowym new, generyki pozwalają dynamicznie instancjować typy, jeszcze bardziej poprawiając możliwość ponownego wykorzystania kodu i redukcję redundancji.

Ograniczenie new() w typie generycznym

Ograniczenie new() jest podstawą użycia new z generykami, specyfikując, że argument typu w klasie lub metodzie generycznej musi mieć publiczny bezparametrowy konstruktor. To ograniczenie pozwala tworzyć instancje typu generycznego w obrębie klasy lub metody, czyniąc twoje klasy i metody generyczne bardziej elastycznymi i potężnymi.

public class Container<t> where T : new()
{
    public T CreateItem()
    {
        return new T();
    }
}
public class Container<t> where T : new()
{
    public T CreateItem()
    {
        return new T();
    }
}
Public Class Container(Of T As {New})
    Public Function CreateItem() As T
        Return New T()
    End Function
End Class
$vbLabelText   $csharpLabel

W tym przykładzie, Container może tworzyć instancje T, jeśli T ma bezparametrowy konstruktor. Ta funkcjonalność jest nieoceniona przy tworzeniu bibliotek lub frameworków, które wymagają tworzenia obiektów, ale nie znają z góry konkretnych typów.

Wprowadzenie do IronPDF

IronPDF – biblioteka C# do generowania i manipulacji PDF wyróznia sie jako potężne narzędzie wykorzystujące możliwości C# do pracy z plikami PDF. Dzięki włączeniu IronPDF, programiści mogą programowo tworzyć nowe dokumenty PDF z łańcuchów HTML, plików lub adresów URL, manipulować istniejącymi PDF-ami i wyodrębniać zawartość, wszystko za pomocą znanej składni C# i wykorzystując słowo kluczowe new do tworzenia obiektów.

IronPDF wyróżnia się w konwersji HTML do PDF, zapewniając precyzyjne zachowanie oryginalnych układów i stylów. Idealnie nadaje się do tworzenia plików PDF z treści internetowych, takich jak raporty, faktury i dokumentacja. Dzięki obsłudze plików HTML, adresów URL i surowych ciągów znaków HTML, IronPDF z łatwością tworzy wysokiej jakości dokumenty PDF.

using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
using IronPdf;

class Program
{
    static void Main(string[] args)
    {
        var renderer = new ChromePdfRenderer();

        // 1. Convert HTML String to PDF
        var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
        var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
        pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");

        // 2. Convert HTML File to PDF
        var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
        var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
        pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");

        // 3. Convert URL to PDF
        var url = "http://ironpdf.com"; // Specify the URL
        var pdfFromUrl = renderer.RenderUrlAsPdf(url);
        pdfFromUrl.SaveAs("URLToPDF.pdf");
    }
}
Imports IronPdf

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		Dim renderer = New ChromePdfRenderer()

		' 1. Convert HTML String to PDF
		Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
		Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
		pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")

		' 2. Convert HTML File to PDF
		Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
		Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
		pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")

		' 3. Convert URL to PDF
		Dim url = "http://ironpdf.com" ' Specify the URL
		Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
		pdfFromUrl.SaveAs("URLToPDF.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Przykład kodu

using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            IronPdf.License.LicenseKey = "License-Key";

            // Create a new PDF document from HTML content
            var renderer = new ChromePdfRenderer();
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1><p>This is a PDF generated from HTML using IronPDF.</p>");

            // Save the PDF to a file
            string filePath = "HelloWorld.pdf";
            pdf.SaveAs(filePath);

            // Confirmation message
            Console.WriteLine($"PDF file has been generated at: {Environment.CurrentDirectory}\\{filePath}");
        }
    }
}
using IronPdf;
using System;

namespace IronPdfExample
{
    class Program
    {
        static void Main(string[] args)
        {
            IronPdf.License.LicenseKey = "License-Key";

            // Create a new PDF document from HTML content
            var renderer = new ChromePdfRenderer();
            var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1><p>This is a PDF generated from HTML using IronPDF.</p>");

            // Save the PDF to a file
            string filePath = "HelloWorld.pdf";
            pdf.SaveAs(filePath);

            // Confirmation message
            Console.WriteLine($"PDF file has been generated at: {Environment.CurrentDirectory}\\{filePath}");
        }
    }
}
Imports IronPdf
Imports System

Namespace IronPdfExample
	Friend Class Program
		Shared Sub Main(ByVal args() As String)
			IronPdf.License.LicenseKey = "License-Key"

			' Create a new PDF document from HTML content
			Dim renderer = New ChromePdfRenderer()
			Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1><p>This is a PDF generated from HTML using IronPDF.</p>")

			' Save the PDF to a file
			Dim filePath As String = "HelloWorld.pdf"
			pdf.SaveAs(filePath)

			' Confirmation message
			Console.WriteLine($"PDF file has been generated at: {Environment.CurrentDirectory}\{filePath}")
		End Sub
	End Class
End Namespace
$vbLabelText   $csharpLabel

W tym fragmencie klasy Program new IronPdf.ChromePdfRenderer() demonstruje instancjonowanie obiektu renderera IronPDF. Ten obiekt jest następnie używany do tworzenia nowego PDF z łańcucha HTML, prezentując płynną integrację zewnętrznych bibliotek z wzorcami tworzenia obiektów w C#. IronPDF wymaga użycia słowa kluczowego new do inicjalizacji swoich klas, co czyni to odpowiednim przykładem dla deweloperów uczących się o tworzeniu obiektów i eksplorujących zaawansowane funkcje C#.

Wnioski

Słowo kluczowe new w C# jest fundamentem programowania zorientowanego obiektowo, umożliwiającym programistom tworzenie instancji obiektów, zarządzanie dziedziczeniem i precyzyjne oraz łatwe korzystanie z generyków. Przez praktyczne przykłady, od tworzenia prostych instancji klas po wykorzystanie zaawansowanych funkcji jak typy anonimowe i inicjalizatory obiektów, ten przewodnik demonstruje wszechstronność i moc new.

Integracja IronPDF pokazuje, jak C# może wykraczać poza tradycyjne aplikacje, pozwalając na generowanie i manipulowanie plikami PDF poprzez kod. IronPDF oferuje bezpłatną wersję próbną i opcje licencyjne dla deweloperów, aby zbadać jego funkcjonalności, z licencjami zaczynającymi się od konkurencyjnej ceny.

Często Zadawane Pytania

W jaki sposób nowe słowo kluczowe ułatwia instancjonowanie obiektów w języku C#?

W języku C# słowo kluczowe new ułatwia instancjonowanie obiektów poprzez wywołanie konstruktora klasy w celu przydzielenia pamięci dla nowego obiektu. Jest to niezbędne do tworzenia instancji klas lub struktur.

Jaka jest rola nowego słowa kluczowego w dziedziczeniu klas w języku C#?

Nowe słowo kluczowe w dziedziczeniu klas pozwala klasie pochodnej wprowadzić element o tej samej nazwie co element dziedziczony, skutecznie ukrywając element klasy bazowej bez jego nadpisywania.

Jak przekonwertować HTML na PDF za pomocą języka C#?

Możesz wykorzystać możliwości IronPDF do konwersji HTML na PDF w języku C#. Biblioteka umożliwia renderowanie ciągów znaków i plików HTML do formatu PDF, zachowując oryginalny układ i styl.

Jaki jest cel ograniczenia new() w generykach języka C#?

Ograniczenie new() w generykach C# określa, że argument typu musi posiadać publiczny konstruktor bezparametrowy, umożliwiający tworzenie instancji typu generycznego w ramach klasy lub metody.

Jakie korzyści dla programistów C# płyną z inicjalizatorów obiektów?

Inicjalizatory obiektów w języku C# pozwalają programistom tworzyć instancję klasy i ustawiać jej właściwości w jednym wyrażeniu, poprawiając czytelność kodu i zmniejszając potrzebę stosowania wielu konstruktorów.

Jak generować i edytować pliki PDF w języku C#?

Za pomocą biblioteki IronPDF można generować i edytować pliki PDF w języku C#. Biblioteka ta oferuje funkcje tworzenia plików PDF z HTML, edycji istniejących plików PDF oraz wyodrębniania treści przy użyciu składni języka C#.

Czym są typy anonimowe w języku C# i kiedy należy ich używać?

Typy anonimowe w języku C# służą do tworzenia lekkich, tymczasowych struktur danych bez formalnego deklarowania klasy. Są one przydatne w sytuacjach takich jak zapytania LINQ, gdzie potrzebny jest tylko podzbiór właściwości.

W jaki sposób nowe słowo kluczowe usprawnia korzystanie z bibliotek innych firm w języku C#?

Nowe słowo kluczowe usprawnia korzystanie z bibliotek innych firm w języku C#, umożliwiając programistom instancjonowanie obiektów z tych bibliotek, np. tworzenie obiektów IronPDF w celu generowania plików PDF ze źródeł HTML.

Jacob Mellor, Dyrektor Technologiczny @ Team Iron
Dyrektor ds. technologii

Jacob Mellor jest Chief Technology Officer w Iron Software i wizjonerskim inżynierem, pionierem technologii C# PDF. Jako pierwotny deweloper głównej bazy kodowej Iron Software, kształtuje architekturę produktów firmy od jej początku, przekształcając ją wspólnie z CEO Cameron Rimington w firmę liczą...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie