C# 将静态类放入字典中

标签 c# dictionary static

我在之前提出的问题中不清楚,所以我会尝试更明确。

有没有办法将静态类放入字典中,以便调用它的函数?如果这不可能,那么不涉及使用您可以建议的实例的最佳替代方案是什么?

下面是我想如何使用它:

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/

相关文章:

python - 如何使用 for 循环创建字典列表?

C# 循环遍历 List<dictionary<string,string>> 来填充 DataTable

python - 调用 '.get()' 问题返回“无”

c# - 静态构造函数保证每个应用程序域只运行一次。如何?

c# - 逻辑运算结果的地址是什么?

c# - 如何使用文章 Name=sample-article-name [MVC Core2.2] 将 "www.example.com/sample-article-name"路由到 Razor Page Index.cshtml

c# - 在 Visual Studio 2015 解决方案中恢复所有 Nuget 包

c++ - 函数返回静态对象的不同地址

ios - 更改颜色时 Swift 更新 UIColor

c# - 正确/不正确地使用委托(delegate)来实现可扩展性