Dot-Net

如何使用靜態成員創建 .NET 介面?

  • December 23, 2020

在 .NET 3.5 中,我想創建一個單例介面:

interface ISingleton <T>
{
 public static T Instance {get;}
}

當然這不起作用,但這是我想要的。有什麼建議麼?

編輯:我只想知道所有的單例都會有一個名為 Instance 的類類型的靜態屬性。它總是在那裡。介面將是表達這一點的明確方式。

據我所知,介面不能是單例,因為它實際上並不存在。介面是實現必須遵循的契約。因此,實現可以是單例,但介面不能。

雖然我同意單例被過度使用的其他海報,但您問題的一個可能解決方案是提供一個抽象基類,其類型參數為派生單例:

public abstract class Singleton<T> where T : Singleton<T>
{
 private static T _instance;

 public static T Instance
 {
   get { return _instance; }
   protected set { _instance = value; }
 }
}

任何從 Singleton 派生的類都將具有正確類型的靜態 Instance 屬性:

public class MySingleton : Singleton<MySingleton>
{
   static MySingleton()
   {
       Instance = new MySingleton();
   }

   private MySingleton() { } 
}

不過,在使用這樣的東西之前,您應該真正考慮是否需要單例,或者您是否最好使用普通的靜態類。

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