.NET 帮助

C# 新手指南(开发人员如何使用)

发布 2023年六月13日
分享:

C# 中的new操作符关键字用途广泛,在语言中具有多种基本功能。 从实例化对象到隐藏继承成员,了解它们的应用对于有效的 C# 开发至关重要。 本指南探讨关键词的各种用途此外,还必须提供清晰的示例来说明其功能和灵活性。 我们还将探讨IronSoftware 上的 IronPDF 库概述本指南稍后部分。

对象实例化简介

对象实例化是 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# New(如何为开发人员工作):图 2 - Lambda 输出

在继承中使用 "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# New(如何为开发人员工作):图 3 - 隐藏继承成员输出

使用泛型理解新内容

泛型在 C# 编程中引入了抽象层,允许开发人员设计对泛型进行操作的类、方法和接口。与new关键字搭配使用时,泛型使您能够动态地实例化类型,从而进一步提高代码的可重用性并减少冗余。

通用类型中的 new() 约束

新() 约束是使用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#

在本例中,*容器只要T有一个无参数构造函数,就可以创建T**的实例。 在开发需要创建对象但又不知道具体类型的库或框架时,这种能力非常宝贵。

IronPDF 简介

C# New(如何为开发人员工作):图 4 - IronPDF

IronPDF - 用于 PDF 生成和操作的 C# 库作为一款功能强大的工具,C# 可用于处理 PDF 文件。 通过结合 IronPDF,开发人员可以通过编程创建新的从 HTML 字符串生成 PDF 文档通过熟悉的 C# 语法,并利用new关键字进行对象实例化,您就可以创建 PDF、文件或 URL,操作现有 PDF 并提取内容。

代码示例

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#

在该类程序片段中,new IronPdf.ChromePdfRenderer() 演示 IronPDF 渲染器对象的实例化。 然后使用该对象从 HTML 字符串创建一个新的 PDF,展示第三方库与 C# 对象创建模式的无缝集成。 IronPdf 需要使用new关键字来启动它的类,这使它成为开发人员学习对象实例化和探索 C# 高级功能的相关示例。

输出

运行程序时,您将在控制台看到以下信息:

C# New(如何为开发人员工作):图 5 - 控制台输出

打开 PDF 文件后,您将看到以下内容:

C# New(如何为开发人员工作):图 6 - PDF 输出

结论

C# 中的关键字是面向对象编程的基石,它使开发人员能够精确、轻松地实例化对象、管理继承和使用泛型。 从创建简单的类实例到利用匿名类型和对象初始化器等高级功能,本指南通过实际示例展示了new的多功能性和强大功能。

IronPDF 的集成展示了 C# 如何将其触角延伸到传统应用程序之外,通过代码实现 PDF 文件的生成和操作。 IronPDF 提供一个免费试用和许可选项我们还将为开发人员提供具有竞争力价格的许可证,以便开发人员探索其功能。

< 前一页
C# 查找(开发人员如何使用)
下一步 >
C# 这 (它是怎么为开发人员工作的)

准备开始了吗? 版本: 2024.12 刚刚发布

免费NuGet下载 总下载量: 11,781,565 查看许可证 >