2017-05-04 58 views
-1

的簽名,我有一些代表:能夠執行靜態類的方法遵循一個代表

public class StringDelegates 
{ 
    public delegate string StringMethod(object container); 
} 

public class IntegerDelegates 
{ 
    public delegate int IntegerMethod(object container); 
} 

public class DoubleDelegates 
{ 
    public delegate double DoubleMethod(object container); 
} 

,我有包含遵循此委託簽名方法的一些靜態類:

public static class StringGenerators 
{ 
    public static string FirstName(object container) 
    { 
     return Name.GetFirstName((string)container); 
    } 

    public static string LastName(object container) 
    { 
     return Name.GetLastName(); 
    } 
} 

public static class IntegerGenerators 
{ 
    public static int Range(object container) 
    { 
     string[] args = (string[])container; 
     int min = Convert.ToInt32(args[0]); 
     int max = Convert.ToInt32(args[1]); 
     return RandomGenerator.GetRandomInt(min, max); 
    } 
} 

我的問題:有沒有辦法強制這些類實現遵守委託簽名的方法?

+5

在編譯時?不。你可以很容易地編寫單元測試。 –

+0

@JonSkeet這太糟糕了,編譯時沒有辦法。我想單元測試的想法就足夠了,你可能有任何鏈接/例子,我可以看看?隨意提交作爲一個答案,我可以接受它 –

+0

@TalenKylon如果'StringGenerators'等不是靜態類,你可以寫接口。然後,也許給每個人一個單身人士的實例。例如。 'StringGenerators'會有'private static StringGenerators _instance = new StringGenerators();公共靜態StringGenerators實例{獲得{返回_實例; }}'使構造函數私有。遠非理想。 –

回答

0

是的,你可以做到這一點。我不推薦這個,但這是對你的問題的字面解答:

public static class StringGenerators 
{ 
    public static StringDelegates.StringMethod FirstName = container => 
     Name.GetFirstName((string) container); 
} 
+2

對於這個問題,這不是真正的答案:1)班上現在有* no *方法,只是公共領域。 2)它不阻止任何其他方法在類中引入,而不遵循該模式。 –

+0

它近在咫尺。 –

+1

可能 - 但我認爲只是「不」的答案更準確。 –