C#基类中未使用的字段

Jue*_*gen 3 c# field base-class

在prism应用程序中,我有一个像这样的模块定义:

[Module(ModuleName = "TestModule", OnDemand = true)]
public class Test :
    ModelBase,
    IModule
{
  ...
  moduleName = "TestModule";
  ...
};
Run Code Online (Sandbox Code Playgroud)

如您所见,这些模块将在运行时加载,其中许多模块具有不同的模块名称.

为了避免代码冗余,我编写了一个基类ModelBase,这些模型从中派生如下:

public class ModelBase:
{
    /// <summary>
    /// The module name
    /// </summary>        
    protected string moduleName;
    ...
}
Run Code Online (Sandbox Code Playgroud)

字符串moduleName从不在ModelBase中使用,因此我得到编译器警告CS0169,其中说明了这一点.我不喜欢压制警告,所以我想知道是否有更好的解决方案.

moduleName将使用派生类中的实际名称进行设置,如第1段所示.

问题是无法在ModelBase类中指定名称,因为此处不知道模块的名称.

人们可以写这个问题可能听起来很愚蠢

public class ModelBase:
{
    /// <summary>
    /// The module name
    /// </summary>        
    protected string moduleName = "";
    ...
}
Run Code Online (Sandbox Code Playgroud)

克服这个问题.

我想知道这个反复出现的问题是否存在"最佳实践".非常感谢

克林斯曼

Ree*_*sey 6

我个人会把它作为一个抽象的财产:

protected abstract string ModuleName { get; }
Run Code Online (Sandbox Code Playgroud)

作为额外的奖励,这将强制派生类实现它,这应该减少错误的可能性.如果您的使用ModuleName应该是公开的,您当然也可以将该物业公之于众.

一个类似的替代方法是使它成为您的类的构造函数参数:

protected ModelBase(string name)
{
    this.moduleName = name;
}
Run Code Online (Sandbox Code Playgroud)

这将再次强制将其作为构造函数的一部分在每个派生类中处理.