我在之前提出的问题中不清楚,所以我会尝试更明确。
有没有办法将静态类放入字典中,以便调用它的函数?如果这不可能,那么不涉及使用您可以建议的实例的最佳替代方案是什么?
下面是我想如何使用它:
static class MyStatic : IInterface
{
static void Do(){}
}
static class MyStatic2 : IInterface
{
static void Do(){}
}
class StaticMap
{
static Dictionary<Type,IInterface.class> dictionary = new Dictionary<Type,IInterface.class>
{
{Type.1, MyStatic}
{Type.2, MyStatic2}
};
}
// Client Code
class ClientCode
{
void Start()
{
StaticMap.dictionary[Type.1].Do();
}
}
最佳答案
有一些根本原因导致您不能直接这样做:
- 静态方法调用在编译时绑定(bind)
- 静态调用不是继承的——它们绑定(bind)到定义它们的类
- 静态方法之间没有隐式基类型(因此没有多态性),即使名称、输入和输出都相同
由于每个静态方法的签名都相同,因此您可以在字典中存储一个Action
:
static Dictionary<Type,Action> dictionary = new Dictionary<Type,Action>
{
{Type.1, MyStatic.Do}
{Type.2, MyStatic2.Do}
};
然后你可以直接调用Action
:
void Start()
{
StaticMap.dictionary[Type.1]();
}
它有点重复,因为您还必须在字典中指定方法名称,但它是类型安全的。
关于C# 将静态类放入字典中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47295131/