2011-07-22 84 views
4

我的問題是我是否可以將一個靜態類分配給另一個變量(以及它是什麼類型)?我可以爲一個變量分配一個靜態類嗎?

說我有

public static class AClassWithALongNameIDontWantTotType{ 
    public static bool methodA() { stuff } 
} 

,然後我有

class B{ 

} 

我可以讓這個的class B裏面我可以重新分配這個類的東西用更短的名稱,如:

SomeType a = AClassWithALongNameIDontWantTotType 

然後就可以做

a.methodA() 

我可以做這樣的事情

Func<bool> a = AClassWithALongNameIDontWantTotType.methodA() 

脫身功能,但我寧願全班。

謝謝!

+0

您不必鍵入完整的名稱,只是一個開始,然後標籤)。 –

+0

是的,我正在使用它,但我仍然喜歡當我的代碼沒有散佈很長的名字,如果有任何縮短它的方法:P看起來更乾淨! – rafalio

回答

9

如果你想這純粹是爲了避免打字長文件名的目的,你可以如果你使用IntelliSense使用別名

using a = SomeNamespace.AClassWithALongNameIDontWantToType; 
+0

謝謝!正是我想要的:P – rafalio

3

不,你不能,因爲你不能有一個靜態類的實例。你可以通過反思或動態來完成你要找的東西。要做到這一點我創建了一個DynamicObject的幫助:

class StaticMethodProvider : DynamicObject 
{ 
    private Type ToWorkWith { get; set; } 

    public StaticMethodProvider(Type toWorkWith) 
    { 
     ToWorkWith = toWorkWith; 
    } 

    public override bool TryInvokeMember(InvokeMemberBinder binder, 
     object[] args, out object result) 
    { 
     result = ToWorkWith.InvokeMember(binder.Name, BindingFlags.InvokeMethod, 
      null, null, null); 
     return true; 
    } 
} 

,然後你可以做

dynamic a = new StaticMethodProvider(
    typeof(AClassWithALongNameIDontWantTotType)); 
Console.WriteLine(a.methodA()); 

但你不會有智能感知和編譯時的安全性。這可能有點矯枉過正。

相關問題