是否可以將對象創建限制爲特定類的方法?如何將對象創建限制到特定類的方法?
對於爲例:我有一個類事務,我想限制它創建對象,以從AbstractService或IService繼承任何類的方法:
允許的情景:
public class ServiceA : AbstractService (or IService)
{
public void MethodA()
{
var transaction = new Transaction();
}
public void MethodB()
{
var transaction = new Transaction();
}
}
禁止情景:
public class ServiceB
{
public void MethodA()
{
var transaction = new Transaction(); // cannot create
}
public void MethodB()
{
var transaction = new Transaction(); // cannot create
}
}
有一個訪問修飾符或其他我可以安裝該場景的東西?
如果'ServiceA'與'Transaction'在同一個程序集中,但是在一個單獨的程序集中,而不是'ServiceB',那麼你可以爲'Transaction'' internal'構造函數。否則,您可以將其設置爲'private'並使用反射來創建它的一個實例,並禁止其他類通過拋出異常來創建實例。我認爲這是你能做的最好的事情。 –
排序回答:沒有。 – Jamiec
想不到應該如何實現這個優雅的方式。一個骯髒的黑客可能確實是檢查'Transaction'的構造函數中的'StackFrame'。但實際上我認爲你在這裏有一個錯誤的設計決定,但我不能斷定,如果不知道你正在努力實現什麼。爲什麼你想這樣做?如果'ServiceA.MethodA()'會調用'ServiceB.MethodA'然後創建'Transaction',它會是合法的嗎?或者只有來自'ServiceA'的「直接」呼叫?不管「直接」意味着編譯器優化之後的意思。 –