Dot-Net

如何在 C# 中定義介面的預設實現?

  • July 17, 2010

c# 中有一些黑魔法程式碼,您可以在其中定義介面的預設實現。

所以你可以寫

var instance = new ISomeInterface();

任何指針?

更新 1:請注意,我沒有問這是否是個好主意。怎麼可能做到這一點。

更新 2:對於任何看到已接受答案的人。

  • “這應該僅僅被視為一種好奇心。” 來自 Marc Gravel “Newing up” 界面
  • “使用專為 COM 互操作設計的工具來做完全不同的事情是個壞主意。這使得下一個必須維護它的人無法理解你的程式碼”來自 Eric Lippert “Newing up” Interfaces
  • “雖然它可能有效,但如果理性編碼人員在生產程式碼中發現它,它將被重構為使用基類或依賴注入。” 斯蒂芬克利裡在下面的評論中。

黑魔法來了:

class Program
{
   static void Main()
   {
       IFoo foo = new IFoo("black magic");
       foo.Bar();
   }
}

[ComImport]
[Guid("C8AEBD72-8CAF-43B0-8507-FAB55C937E8A")]
[CoClass(typeof(FooImpl))]
public interface IFoo
{
   void Bar();
}

public class FooImpl : IFoo
{
   private readonly string _text;
   public FooImpl(string text)
   {
       _text = text;
   }

   public void Bar()
   {
       Console.WriteLine(_text);
   }
}

請注意,您不僅可以實例化介面,還可以將參數傳遞給它的建構子:-)

引用自:https://stackoverflow.com/questions/3271223