Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以给变量分配一个静态类吗?_C# - Fatal编程技术网

C# 我可以给变量分配一个静态类吗?

C# 我可以给变量分配一个静态类吗?,c#,C#,我的问题是,我是否可以将一个静态类分配给另一个变量(这是什么类型的变量) 说我有 public static class AClassWithALongNameIDontWantTotType{ public static bool methodA() { stuff } } 然后我有 class B{ } 我是否可以在类B中将该类重新分配给名称较短的对象,例如: SomeType a = AClassWithALongNameIDontWantTotType 然后才能做到 a.

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

说我有

public static class AClassWithALongNameIDontWantTotType{
    public static bool methodA() { stuff }
}
然后我有

class B{

}
我是否可以在
类B中
将该类重新分配给名称较短的对象,例如:

SomeType a = AClassWithALongNameIDontWantTotType
然后才能做到

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

我可以通过这样做得到一个函数

Func<bool> a = AClassWithALongNameIDontWantTotType.methodA() 
Func a=AClassWithALongNameIDontWantTotType.methodA()
但是我更喜欢整节课


谢谢

不,您不能,因为您不能有静态类的实例。您可以通过反射或动态来完成您想要的。为此,我创建了一个
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;
    }
}
然后你就可以

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

但这样你就不会有智能感知和编译时安全。这可能有点过头了。

如果您希望这样做纯粹是为了避免键入长名称,那么可以使用别名

using a = SomeNamespace.AClassWithALongNameIDontWantToType;

如果使用intellisense,则不必键入全名,只需键入开头,然后键入tab;)。是的,我正在使用它,但我仍然喜欢当我的代码中没有长名称时,如果有任何方法可以缩短它:P看起来更干净!谢谢正是我想要的:P