2011-07-22 83 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()); 

但你不会有智能感知和编译时的安全性。这可能有点矫枉过正。

相关问题