天天看點

C#的New關鍵字的幾種用法

  在C#中,new關鍵字主要有如下三種用法:

  1. new 運算符 用于建立對象和調用構造函數。
  2. new 修飾符 用于隐藏基類成員的繼承成員。
  3. new 限制 用于在泛型聲明中限制可能用作類型參數的參數的類型。

1.new 運算符

  1).用于建立對象和調用構造函數

示例:Class_Test MyClass = new Class_Test();      

  2).也用于為值類型調用預設的構造函數

示例:int myInt = new int();      

  myInt 初始化為 0,它是 int 類型的預設值。該語句的效果等同于:int myInt = 0;

  3).不能重載 new 運算符。

  4).如果 new 運算符配置設定記憶體失敗,則它将引發 OutOfMemoryException 異常。

2.new 修飾符

  使用 new 修飾符顯式隐藏從基類繼承的成員。若要隐藏繼承的成員,請使用相同名稱在派生類中聲明該成員,并用 new 修飾符修飾它。

  請看下面的類:

1   public class MyClass 
2   { 
3       public int x; 
4   
5       public void Invoke() {} 
6    
7    }       

  在派生類中用 Invoke 名稱聲明成員會隐藏基類中的 Invoke 方法,即:

   public class MyDerivedC : MyClass 
  { 
  
      new public void Invoke() {} 
 
  } 
        

  但是,因為字段 x 不是通過類似名隐藏的,是以不會影響該字段。

  通過繼承隐藏名稱采用下列形式之一:

  • 引入類或結構中的常數、指定、屬性或類型隐藏具有相同名稱的所有基類成員。
  • 引入類或結構中的方法隐藏基類中具有相同名稱的屬性、字段和類型。同時也隐藏具有相同簽名的所有基類方法。
  • 引入類或結構中的索引器将隐藏具有相同名稱的所有基類索引器。
  • 在同一成員上同時使用 new 和 override 是錯誤的。

  【注意】:在不隐藏繼承成員的聲明中使用 new 修飾符将生成警告。

  示例

  在該例中,嵌套類 MyClass 隐藏了基類中具有相同名稱的類。該例不僅說明了如何使用完全限定名通路隐藏類成員,同時也說明了如何使用 new 修飾符消除警告消息。

using System; 

public class MyBaseC 
{ 
    public class MyClass 
    {  
        public int x = 200; 
        public int y; 
    } 
} 

public class MyDerivedC : MyBaseC 
{ 
    new public class MyClass // nested type hiding the base type members 
    { 
        public int x = 100; 
        public int y; 
        public int z; 
    } 

    public static void Main() 
    { 
        // Creating object from the overlapping class: 
        MyClass S1 = new MyClass(); 
        // Creating object from the hidden class: 
        MyBaseC.MyClass S2 = new MyBaseC.MyClass(); 
        Console.WriteLine(S1.x); 
        Console.WriteLine(S2.x); 
    } 
}                           

  輸出

  100

  200

轉載于:https://www.cnblogs.com/eagle927183/archive/2008/12/29/1364327.html

c#