我可以为变量分配静态类吗?

时间:2011-07-22 14:30:48

标签: c#

我的问题是我是否可以将静态类分配给另一个变量(以及它将是什么类型)?

说我有

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

然后我

class B{

}

我可以这样做,以便在class B内部我可以将此类重新分配给名称较短的内容,例如:

SomeType a = AClassWithALongNameIDontWantTotType

然后能够做到

a.methodA()

我可以通过做

这样的事情来获得一个功能
Func<bool> a = AClassWithALongNameIDontWantTotType.methodA() 

但我更愿意拥有全班。

谢谢!

2 个答案:

答案 0 :(得分:10)

如果您希望这纯粹是为了避免输入长名称,可以使用别名

using a = SomeNamespace.AClassWithALongNameIDontWantToType;

答案 1 :(得分: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());

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