首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# new 關鍵字三大用法全解析:運算子、修飾詞、約束條件

     編輯:關於C#

概覽

用法關鍵字角色核心目的
new 運算子運算子建立物件、呼叫建構函式、值型別預設初始化
new 修飾詞修飾詞隱藏基底類別成員 (非覆寫)
new 約束泛型型別參數約束限定型別參數必須有公用無參建構函式

1. new 運算子

建立參考型別實例

var myClass = new MyClass(); // 呼叫建構函式,配置 Managed Heap 記憶體

值型別預設初始化


int i = new int();     // 等同 int i = 0;
var dt = new DateTime(); // 等同 DateTime.MinValue

對值型別呼叫無參建構函式即「零初始化」。

特性

  • 不可多載。
  • 記憶體配置失敗拋 OutOfMemoryException。

2. new 修飾詞 — 隱藏繼承成員

明確表示「我刻意隱藏基底同名成員」,消除編譯器警告 CS0108。

基本語法


public class Base {
    public int X;
    public void Invoke() { }
}

public class Derived : Base {
    new public void Invoke() { } // 隱藏 Base.Invoke
    // new public int X; // 欄位隱藏同樣合法
}

隱藏規則

  1. 常數/欄位/屬性/型別 → 隱藏基底所有同名成員。
  2. 方法 → 隱藏基底同名屬性/欄位/型別 + 所有同簽名方法。
  3. 索引子 → 隱藏基底所有同名索引子。
  4. new 與 override 互斥 (編譯錯誤)。

完整範例:巢狀類型隱藏


public class BaseC {
    public class Nested { public int X = 200; }
}

public class DerivedC : BaseC {
    new public class Nested { public int X = 100; } // 隱藏基底 Nested
}

static void Main() {
    var d1 = new DerivedC.Nested();      // X = 100
    var b1 = new BaseC.Nested();         // X = 200
    Console.WriteLine($"{d1.X}, {b1.X}");
}

3. new 約束 — 泛型工廠模式關鍵


public T Create<T>() where T : new() {
    return new T(); // 編譯器保證 T 有 public 無參建構函式
}

// 使用
var obj = Create<MyClass>(); // MyClass 必須有 public MyClass()

組合約束範例


public class Repository<TEntity> where TEntity : class, new(), IEntity {
    public TEntity Create() => new TEntity(); // 滿足 class + new() + 介面
}

掌握 `new` 三重身分,能精準表達「建立實體」、「刻意隱藏繼承」、「泛型建構約束」三種截然不同的語意,寫出更清晰、編譯器更能協助驗證的程式碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved