跳過到頁腳內容
.NET幫助

C# New(開發者的工作原理)

在C#中,new 運算符關鍵字功能多樣,擔任著語言中的多項重要功能。 從實例化對象到隱藏繼承成員,了解它們的應用對於有效的C#開發至關重要。 本指南探討了new關鍵字的各種用法,提供清晰的示例來說明其強大和靈活性。 我們還會在本指南後面探索IronSoftware上的IronPDF程式庫概述

物件實例化簡介

物件實例化是指new運算符創建類或結構體的實例的過程。 在C#中,這主要是使用new關鍵字來實現,它調用指定類型的構造函數並為新對象分配內存。

使用new創建實例

要創建物件的實例,new運算符後跟類名和一對圓括號。 如果該類有一個接受參數的構造函數,則必須在這些括號內提供參數。

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

預設與無參構造函數

如果類中沒有明確定義構造函數,則C#將提供一個默認構造函數。 然而,一旦定義了帶參構造函數,就必須明確聲明無參構造函數(如果需要)。

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

高級物件建立技術

在C#中,物件建立不僅僅是關於實例化類; 它是利用語言強大功能的門徑,以便編碼更高效、更易讀且更加精簡。 在這裡,我們探索了一些高級技術,比如處理陣列、利用類型以及使用物件初始化器來優化您的編碼工作。

陣列與集合

在C#中創建特定陣列類型的陣列是一項基礎技能,但細節能提升您的編碼能力。 使用new關鍵字,您可以實例化陣列,指定其類型和應包含的元素數量。 這對於以結構化方式管理變量集合至關重要。 超越基本陣列,new支持多維和鋸齒陣列的創建,適應復雜的數據結構。

// 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

匿名類型

在需要臨時數據結構的情境下,匿名類型無需宣告正式類別的額外負擔即可發揮作用。 通過使用具有屬性初始化語法的new關鍵字,您可以即時創建對象。 這一功能在LINQ查詢中尤其有用,當您需要從較大對象中選擇屬性的子集,或在不創建特定類型的情況下快速分組數據時。

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

物件初始化器

物件初始化器是一種語法便捷性,允許您創建類的實例並立即設置其屬性,而無需調用帶參構造函數。 這不僅使代碼更易讀,還通過消除不同場景所需的多個構造函數減少了出錯的可能性。 物件初始化器在處理複雜對象時特別實用,使您能夠只設置所需的屬性。

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

區域函數與Lambda表示式

C#支持區域函數和Lambda表示式,增強了代碼的靈活性和簡潔性。

區域函數

區域函數是在另一個方法範疇內定義的方法,是組織代碼和封裝功能的強大工具。

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

Lambda表示式

Lambda表示式提供了一種簡潔的方式來編寫內聯表示式或方法,而無需明確的委派類型。

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

在繼承中使用 'new'

在類繼承中,new可以隱藏繼承的成員,使派生類能夠引入與基類成員同名的成員。

隱藏繼承成員

使用new在派生類中隱藏成員不會覆蓋相同的成員; 相反,它引入了一個與基類版本不同的新成員。

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

理解新與泛型

泛型在C#程式設計中引入一定程度的抽象,允許開發者設計作用於泛型類型的類、方法和介面。與new關鍵字配合使用時,泛型讓您能夠動態實例化類型,進一步增強代碼的重用性並減少冗餘。

泛型類型中的new()約束

new()約束是與泛型配合使用new的基石,指定了泛型類或方法中的類型參數必須具有公共的無參構造函數。 此約束使您能在類或方法內創建泛型類型的實例,使您的泛型類和方法更加靈活和強大。

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

在本範例中,Container可以創建T的實例,前提是T具有無參構造函數。 這一功能在開發需要創建物件但事先不知道具體類型的程式庫或框架時尤為寶貴。

IronPDF簡介

IronPDF – 用於PDF生成和操作的C#程式庫凸顯了其作為利用C#功能來處理PDF文件的強大工具。 通過集成IronPDF,開發者可以通過C#的熟悉語法和利用new關鍵字進行物件實例化,程式化地從HTML字符串、文件或URL中創建新PDF文件、操作現有PDF、並提取內容。

IronPDF在HTML轉PDF轉換中表現卓越,確保精確保留原始佈局和樣式。 它非常適合從基於網頁的內容(如報告、發票和文檔)創建PDF。 支持HTML文件、URL和原始HTML字串,IronPDF能夠輕鬆生成高質量的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

程式碼範例

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

在本類Program程式碼片段中,new IronPdf.ChromePdfRenderer()展示了IronPDF渲染器物件的實例化。 然後用此對象從HTML字符串創建新PDF,展示了第三方程式庫與C#物件創建模型的無縫整合。 IronPDF需要使用new關鍵字來啟動其類,使其成為學習物件實例化並探索C#高級特徵的開發者相關示例。

結論

C#中的new關鍵字是面向物件程式設計的基石,使開發者能夠精確且輕鬆地實例化物件、管理繼承和利用泛型。 透過實用的示例,從創建簡單類實例到利用匿名類型和物件初始化器等高級功能,本指南展示了new的靈活性和強大。

IronPDF的整合展示了C#如何突破傳統應用邊界,使通過代碼生成和操作PDF文件成為可能。 IronPDF提供免費試用和授權選項,讓開發者探索其功能,並且授權起始價極具競爭力。

常見問題解答

new 關鍵字如何促進 C# 中的物件實例化?

在 C# 中,new 關鍵字透過呼叫類別的建構函式以分配新物件的記憶體來促進物件實例化。這對於創建類別或結構的實例至關重要。

new 關鍵字在 C# 類別繼承中的角色是什麼?

在類別繼承中,new 關鍵字允許衍生類別引入一個與繼承成員同名的成員,有效隱藏基類成員而不覆寫它。

如何使用 C# 將 HTML 轉換為 PDF?

您可以使用 IronPDF 的功能在 C# 中將 HTML 轉換為 PDF。此庫允許將 HTML 字串和檔案渲染為 PDF,保持原始佈局和樣式。

C# 泛型中 new() 約束的目的何在?

C# 泛型中的 new() 約束指定型別參數必須具有公共無參數建構子,使類別或方法內能建立該泛型型別的實例。

物件初始值設定項如何使 C# 開發人員受益?

C# 中的物件初始值設定項允許開發人員在一個語句中創建類別的實例並設定其屬性,從而改善代碼可讀性並減少多個建構子的需求。

如何在 C# 中生成和操作 PDF?

您可以使用 IronPDF 庫在 C# 中生成和操作 PDF。它提供將 HTML 生成 PDF 的功能,操作現有的 PDF,並使用 C# 語法提取內容。

C# 中的匿名型別是什麼,您何時會使用它們?

C# 中的匿名型別用於創建輕量級、臨時的資料結構,不需正式聲明類別。它們在如 LINQ 查詢僅需部分屬性的情況下十分有用。

new 關鍵字如何增強 C# 中第三方庫的使用?

new 關鍵字通過允許開發人員從這些庫中實例化對象來增強 C# 中第三方庫的使用,例如創建 IronPDF 對象以生成來自 HTML 源的 PDF。

Jacob Mellor, Team Iron 首席技術官
首席技術官

Jacob Mellor是Iron Software的首席技術官,也是開創C# PDF技術的前瞻性工程師。作為Iron Software核心代碼庫的原始開發者,他自公司成立以來就塑造了公司的產品架構,並與CEO Cameron Rimington將公司轉型為服務NASA、Tesla以及全球政府機構的50多人公司。

Jacob擁有曼徹斯特大學土木工程一級榮譽學士學位(1998年–2001年)。他於1999年在倫敦開立首家軟體公司,並於2005年建立了他的第一個.NET組件,專注於解決Microsoft生態系統中的複雜問題。

他的旗艦作品IronPDF和Iron Suite .NET程式庫全球已獲得超過3000萬次NuGet安裝,他的基礎代碼不斷在全球各地驅動開發者工具。擁有25年以上的商業經驗和41年的編碼專業知識,Jacob仍然專注於推動企業級C#、Java和Python PDF技術的創新,同時指導下一代技術領導者。

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我