首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 中接口能否實例化?new 修飾方法與 override 的區別

     編輯:程式設計綜合問答

接口不可直接 new,只能 new 實現類

interface I { void Do(); }
class A : I { public void Do() => Console.WriteLine("A"); }

I i = new A(); // ✅ 正確:接口變量引用實現類對象
// I i = new I(); // ❌ 編譯錯誤:接口無構造函數

new vs override

關鍵字含義基類要求多態行為
new隱藏基類同名成員(方法/屬性)無要求靜態綁定,按引用類型調用
override重寫基類虛方法基類成員標記 virtual/abstract/override動態綁定,按對象實際類型調用

代碼演示

class Base { public virtual void Say() => Console.WriteLine("Base"); }
class Derived : Base {
    public new void Say() => Console.WriteLine("Derived new"); // 隱藏
    // public override void Say() => Console.WriteLine("Derived override"); // 重寫
}
Base b = new Derived();
b.Say(); // 輸出 "Base"(new 隱藏,靜態綁定)
((Derived)b).Say(); // 輸出 "Derived new"

若基類方法非 virtual,只能用 new 隱藏,不可 override。

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