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)
克服这个问题.
我想知道这个反复出现的问题是否存在"最佳实践".非常感谢
克林斯曼
我个人会把它作为一个抽象的财产:
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)
这将再次强制将其作为构造函数的一部分在每个派生类中处理.