Dot-Net
如何在 C# 中定義介面的預設實現?
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); } }請注意,您不僅可以實例化介面,還可以將參數傳遞給它的建構子:-)