c# - 在每个派生类中都有单独的基类静态成员副本

标签 c# .net static-classes

我有以下类结构:

public abstract class PresenterBase
{
    public static Dictionary<string, MethodInfo> methodsList;

    public void Bind()
    public void Initialize();
}


public class DevicePresenter: PresenterBase
{
   public void ShowScreen();
   public void HandleEvents();    
}

public class HomePresenter: PresenterBase
{
   public void ShowScreen();
   public void HandleEvents();
}

我想让 HomePresenter 和 DevicePresenter 拥有在 PresenterBase 中定义的 methodsList 静态成员的单独副本。

不幸的是,它们与上述实现共享相同的副本。

他们是替代方法吗,我可以为 HomePresenter 和 DevicePresenter 单独复制 methodsList? 我不愿意在派生类中定义 methodsList,因为将来如果有人添加另一个派生类,他将必须记住将 methodsList 添加到该类。

最佳答案

根本不要让它成为静态的。这行不通吗?

static 表示与类型关联; non-static 表示与实例关联。

我手头没有 Visual Studio 实例,但我相信您也可以在基类中标记字段 abstract;那么编译器将要求您将它添加到任何派生类中。您绝对可以使用属性来做到这一点。

另一方面,鉴于上述代码,我可能会将抽象方法 ShowScreen()HandleEvents() 添加到 PresenterBase

关于c# - 在每个派生类中都有单独的基类静态成员副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5337038/

相关文章:

c# - ICommunicationObject.State 不起作用?

c# - ListView ComputedVerticalScrollBarVisibilityProperty 总是返回 Visible?

C# - 接口(interface)不能包含运算符

c# BsonSerializer : deserialization through backing fields 收藏

oop - 什么时候使用静态类和方法?

c# - Caliburn Micro 和 ModernUI 示例/教程

c# - DateTime.Now 作为参数值 C#

c# - 如何从 .NET 执行 SSIS 包?

actionscript-3 - AS3 : Static class versus Singleton

java - 如何从 Java 中的另一个类调用非静态方法?