我想在我的應用程序的任何地方訪問一個類,我該怎麼做?如何爲整個應用程序創建一個全局類?
爲了更清楚地說明,我有一個使用一些代碼的地方。我有一個使用相同代碼的其他類。我不想重複,所以我想通過使用某些東西在兩個地方調用相同的代碼。在PHP中,我只是在兩個包括(「abc.php」)...我不想每次我想要使用代碼創建對象。
我想在我的應用程序的任何地方訪問一個類,我該怎麼做?如何爲整個應用程序創建一個全局類?
爲了更清楚地說明,我有一個使用一些代碼的地方。我有一個使用相同代碼的其他類。我不想重複,所以我想通過使用某些東西在兩個地方調用相同的代碼。在PHP中,我只是在兩個包括(「abc.php」)...我不想每次我想要使用代碼創建對象。
C#中全局類的概念實際上只是引用包含該類的適當程序集的一個簡單問題。一旦引用了所需的程序集,就可以通過完全限定的類型名稱或通過導入包含該類的名稱空間來引用選擇的類。 (具體實例或靜態訪問那個類)
或者
你可以有一個Singleton類到處使用它,但有些人會不建議你這樣繼續。
你想從任何地方訪問該類或訪問該類的一個實例嗎?
您可以將其設爲靜態類別 - public static class MyClass { }
- 或者您可以使用Singleton Pattern。
對於最簡單的形式Singleton模式,你可以簡單地添加一個靜態屬性的類(或其他類),它返回類的同一個實例是這樣的:
public class MyClass
{
private static MyClass myClass;
public static MyClass MyClass
{
get { return myClass ?? (myClass = new MyClass()); }
}
private MyClass()
{
//private constructor makes it where this class can only be created by itself
}
}
其他的答案是你已經被告知使用靜態類或單例模式是正確的。
但是請注意,這樣做會影響您的測試能力。一般來說,如果可以的話,更喜歡依賴注入遍歷全局訪問的類。我知道這並非總是可行(或實際)。
就在這一點上,你也應該查找abstract factory pattern。它允許你有一個知名的工廠類來生成你正在使用的類的實際實例。例如,要有全局訪問的日誌記錄類,請不要直接創建日誌記錄類。相反,使用日誌工廠爲您創建它並將界面返回到日誌記錄類。這樣可以更容易地切換進出不同的日誌記錄類。