我的问题是我是否可以将静态类分配给另一个变量(以及它将是什么类型)?
说我有
public static class AClassWithALongNameIDontWantTotType{
public static bool methodA() { stuff }
}
然后我
class B{
}
我可以这样做,以便在class B
内部我可以将此类重新分配给名称较短的内容,例如:
SomeType a = AClassWithALongNameIDontWantTotType
然后能够做到
a.methodA()
我可以通过做
这样的事情来获得一个功能Func<bool> a = AClassWithALongNameIDontWantTotType.methodA()
但我更愿意拥有全班。
谢谢!
答案 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());
但是你不会有智能感知和编译时间安全。这可能有点矫枉过正。