1. 程式人生 > 其它 >.NET(C#)new關鍵字的三種用法

.NET(C#)new關鍵字的三種用法

new是我們大家所熟知的英文單詞,但在C#中,它是一個關鍵字,它可以做運算子,也可以做修飾符,還可以用在泛型T引數約束中。下面我們來介紹一下這3種用法。

1、new 運算子:用於建立物件和呼叫建構函式。這個我們建立物件例項就比較常用了,比如:

StringBuilder str=new  StringBuilder();

2、new 修飾符:在用作修飾符時,new 關鍵字可以顯式隱藏從基類繼承的成員。簡單的說,就是現在寫的這個類,想寫一個和基類中相同的成員,而不繼承基類的。運用多型的特性時,也不會呼叫這個顯示隱藏的方法。具體看下如下程式碼:

  public class Program
    {
        
static void Main(string[] args) { animal a = new animal(); a.name = "animal"; a.say(); cat c = new cat(); c.name = "cat"; c.say(); dog d = new dog(); d.name = "dog"; d.say(); sheep s
= new sheep(); s.name = "sheep"; s.say(); animal a1 = new cat(); a1.say(); animal a2 = new dog(); a2.say(); animal a3 = new sheep(); a3.say(); } } class animal { public string name { get
; set; } public virtual void say() { Console.WriteLine("animal say"); } } class cat : animal { public override void say() { Console.WriteLine("cat say"); } } class dog : animal { public new void say() //這個方法被顯示隱藏了 { Console.WriteLine("dog say"); } } class sheep : animal { }

3、new 約束:用於在泛型宣告中約束可能用作型別引數的引數的型別。舉個例子看一下,泛型類中T要求有一個無參的建構函式,程式碼如下,

 public class Employee
{
private string name;
private int id;
public Employee()
{
name = "Temp";
id = 0;
}
public Employee(string s, int i)
{
name = s;
id = i;
}
public string Name
{
get { return name; }
set { name = value; }
}
public int ID
{
get { return id; }
set { id = value; }
}
}
class ItemFactory where T : new()
{
public T GetNewItem()
{
return new T();
}
}
public class Test
{
public static void Main()
{
ItemFactory EmployeeFactory = new ItemFactory(); ////此處編譯器會檢查Employee是否具有公有的無參建構函式。 //若沒有則會有The Employee must have a public parameterless constructor 錯誤。 Console.WriteLine("{0}'ID is {1}.", EmployeeFactory.GetNewItem().Name, EmployeeFactory.GetNewItem().ID);
}
}