.NET 幫助

C# 新手指南 (開發者使用方式)

發佈 2023年6月13日
分享:

C# 中的 new 運算子關鍵字具有多樣性,能在語言中執行多項重要功能。 從實例化物件到隱藏繼承的成員,理解它們的應用對於有效的 C# 開發至關重要。 本指南探討 new 關鍵字的各種用途,提供清晰的範例來說明其強大和靈活性。 我們也將探索IronPDF 庫概覽在 Iron Software 上在本指南的後面。

物件實例化介紹

物件實例化是使用 new 運算子創建類別或結構的實例的過程。 在 C# 中,這主要是透過使用 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")
VB   C#

預設和無參數建構子

如果在類別中沒有明確定義建構函式,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
VB   C#

高級物件創建技術

在 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
VB   C#

匿名類型

匿名型別在需要臨時資料結構且不想承受宣告正式類別的負擔時表現出色。 通過使用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
	}
VB   C#

物件初始化器

物件初始值設置表示一種語法便利性,允許您在不需要調用帶有參數的建構函式的情況下,創建一個類別的實例並立即設置其屬性。 這不僅使代碼更具可讀性,還通過消除針對不同場景的多個構造函數的需求來降低出錯的可能性。 物件初始化器在處理複雜物件時特別有用,讓您能夠僅設定您需要的屬性。

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
	}
}
VB   C#

本地函式和 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
VB   C#

C# 新增功能(對開發人員的運作方式):圖1 - 本地函數輸出

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
VB   C#

C# 新手(對開發者的運作方式):圖 2 - Lambda 輸出

在繼承中使用「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
VB   C#

C# 新特性(開發人員如何使用):圖 3 - 隱藏繼承成員輸出

理解具有泛型的新特性

泛型在 C# 編程中引入了一種抽象層級,使開發者能夠設計操作泛型型別的類別、方法和介面。當與 new 關鍵字結合使用時,泛型使您能夠動態實例化型別,從而進一步增強程式碼的可重用性並減少冗餘。

泛型类型中的 new() 约束

新的()constraint 是與泛型一起使用 new** 的基石,指定泛型類別或方法中的類型參數必須具有公共的無參數建構函式。 此限制使您能在類別或方法中建立泛型類型的實例,使您的泛型類別和方法更靈活且強大。

public class Container<T> where T : new() {
    public T CreateItem() {
        return new T(); //new T
    }
}
public class Container<T> where T : new() {
    public T CreateItem() {
        return new T(); //new T
    }
}
public class Container(Of T) where T : New() {
	public T CreateItem() { Return New T(); }
}
VB   C#

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

IronPDF 介紹

C# 新 (對開發人員的運作方式):圖 4 - IronPDF

IronPDF – 用於 PDF 生成和操作的 C# 程式庫作為一個強大的工具,利用 C# 的功能來處理 PDF 文件而脫穎而出。 通過結合IronPDF,開發人員可以以程式方式創建新從 HTML 字串生成 PDF 文件文件或URL,操作現有的PDF,提取內容,所有這些都通過熟悉的C#語法並利用new關鍵字來實例化對象。

範例程式碼

using IronPdf;
using System;
namespace IronPdfExample
{
    class Program
    {
//static void main
        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
        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
'static void main
		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
VB   C#

在這個類Program片段中,new IronPdf.ChromePdfRenderer()演示了IronPDF渲染器物件的實例化。 然後,該對象被用於從 HTML 字符串創建新的 PDF,展示了第三方庫與 C# 對象創建模式的無縫集成。 IronPDF需要使用new**關鍵字來初始化其類別,這對於學習物件實例化以及探索C#高級功能的開發人員來說,是一個相關的示例。

輸出

當您運行程式時,您會在控制台上看到以下信息:

C#新功能(對開發人員的運作方式):圖5 - 控制台輸出

一旦您打開 PDF 檔案,您會看到這個:

C# 新手入門(對開發者的運作方式):圖6 - PDF輸出

結論

在 C# 中,new 關鍵字是物件導向程式設計的基石,使開發者能夠精確且輕鬆地實例化物件、管理繼承,以及使用泛型。 透過實際範例,從建立簡單的類別實例到運用匿名類型和物件初始化等進階功能,本指南展示了new的多樣性和強大功能。

IronPDF的整合展示了C#如何擴展其應用範圍,超越傳統應用程式,允許通過程式碼生成和操作PDF文件。 IronPDF 提供一個免費試用和授權選項為開發人員探索其功能的用途,許可證的起價相當具有競爭力。

< 上一頁
C# 查找(開發者使用方式)
下一個 >
C# 這個(它如何為開發者工作)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >