前言
作為一個(gè) C# 程序員,你一定在編寫代碼時(shí)碰到過(guò) new
關(guān)鍵字。
你可能只是簡(jiǎn)單的用它來(lái)創(chuàng)建一個(gè)對(duì)象,但你有沒(méi)有想過(guò)它還有更多的用途呢?
今天,我們就來(lái)深入挖掘一下這個(gè)小家伙,看看它有哪些奇妙的用法!
1. 創(chuàng)建對(duì)象
最常見(jiàn)的用法,無(wú)疑是用 new
來(lái)創(chuàng)建一個(gè)對(duì)象。
比如,你需要一個(gè)新的 Person
對(duì)象:
public class Person
{
public string Name { get; set; }
public Person(string name)
{
Name = name;
}
}
// 使用 new 創(chuàng)建一個(gè)新對(duì)象
Person person = new Person("Jacky");
Console.WriteLine(person.Name); // 輸出: Jacky
2. 創(chuàng)建數(shù)組
除了對(duì)象,new
還可以用來(lái)創(chuàng)建數(shù)組,我們來(lái)看看:
int[] numbers = new int[5]; // 創(chuàng)建一個(gè)大小為 5 的整型數(shù)組
numbers[0] = 1;
numbers[1] = 2;
Console.WriteLine(numbers[0]); // 輸出: 1
3. 隱藏基類成員
如果你有一個(gè)子類想要隱藏基類的方法或?qū)傩裕梢允褂?nbsp;new
關(guān)鍵字,這樣,子類會(huì)定義一個(gè)新的成員,而不是覆蓋基類的成員。
public class Vehicle
{
public void Move()
{
Console.WriteLine("Vehicle is moving.");
}
}
public class Bike : Vehicle
{
public new void Move()
{
Console.WriteLine("Bike is moving.");
}
}
Bike myBike = new Bike();
myBike.Move(); // 輸出: Bike is moving.
((Vehicle)myBike).Move(); // 輸出: Vehicle is moving.
4. 創(chuàng)建匿名對(duì)象
你還可以利用 new
創(chuàng)建一個(gè)沒(méi)有名稱的臨時(shí)對(duì)象,在需要快速初始化時(shí)特別有用:
var anonymousObject = new { Name = "Alice", Age = 30 };
Console.WriteLine($"Name: {anonymousObject.Name}, Age: {anonymousObject.Age}"); // 輸出: Name: Alice, Age: 30
5. 初始化對(duì)象
在 C# 中,可以使用對(duì)象初始值設(shè)定項(xiàng)快速初始化對(duì)象的屬性,這里也用到了 new
:
var car = new Car
{
Make = "Toyota",
Model = "Camry",
Year = 2021
};
Console.WriteLine($"{car.Year} {car.Make} {car.Model}"); // 輸出: 2021 Toyota Camry
6. 泛型約束
當(dāng)你想要確保泛型類型參數(shù)有一個(gè)無(wú)參構(gòu)造函數(shù)時(shí),可以使用where T : new()
,比如:
public class Factory<T> where T : new() {
public T Create() => new T();
}
public class MyClass {
public MyClass() { } // 必須有無(wú)參構(gòu)造函數(shù)
}
// 使用
var factory = new Factory<MyClass>();
var instance = factory.Create(); // 成功創(chuàng)建實(shí)例
7. 定義 Linq 中的屬性別名
在 LINQ 查詢中,可以通過(guò) select new
創(chuàng)建匿名對(duì)象并為屬性指定別名,比如:
var query = from p in products
select new {
ProductID = p.ID, // 別名 ProductID 替換原字段名
Price = p.Price * 1.1
};
總結(jié)
怎么樣,是不是發(fā)現(xiàn)new
關(guān)鍵字比想象中更有意思?
它不僅是創(chuàng)建對(duì)象的鑰匙,還能幫助我們?cè)趶?fù)雜的繼承關(guān)系中做出更精確的控制。
無(wú)論是隱藏基類成員還是為泛型添加約束,new
都在背后默默發(fā)揮著作用。
下次當(dāng)你再次遇到需要使用new
的地方時(shí),不妨回想一下這篇文章的內(nèi)容,或許會(huì)有新的啟發(fā)哦!
閱讀原文:原文鏈接
該文章在 2025/4/12 16:12:22 編輯過(guò)