我有一个C#类,我想为不同的场景重用它.根据具体情况,某些字段的值需要更改.我正在考虑构建一个抽象基类然后继承.后代类的构造函数将包含新的字段值.像这样的东西:
public abstract Class MyBaseClass
{
protected string var1;
protected string var2;
protected string var3;
public MyBaseClass()
{
var1 = string.empty;
var2 = string.empty;
var3 = string.empty;
}
public bool myfunc()
{
//code to do something with var1...var3
}
}
public class myderivedclass: MyBaseClass
{
public myderivedclass()
{
//constructor for derived class
base.var1 = "whatever";
base.var2 = "something";
base.var3 = "somethingelse";
}
}
public class myotherderivedclass: MyBaseClass
{
public myotherderivedclass()
{
//constructor for derived class
base.var1 = "new";
base.var2 = "newer";
base.var3 = "newest";
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我将实例化myderivedclass或myotherderivedclass并调用myfunc之类的函数来完成工作.有没有更好的方法来处理字段中的这些更改或这是一个好方法?
谢谢.
我不知道受保护的字段是否真的被认为是一种不好的做法,但在我看来这是一种代码味道.字段通常是实现细节,派生类不应该依赖于其基类的实现细节.
清洁器的方法是改变var1,var2并var3以虚拟性质,并且在派生类覆盖它们.
public abstract Class MyBaseClass
{
protected virtual string var1 { get { return ""; } }
protected virtual string var2 { get { return ""; } }
protected virtual string var3 { get { return ""; } }
public bool myfunc()
{
//code to do something with var1...var3
}
}
public class myderivedclass: MyBaseClass
{
protected override string var1 { get { return "whatever"; } }
protected override string var2 { get { return "something"; } }
protected override string var3 { get { return "somethingelse"; } }
}
Run Code Online (Sandbox Code Playgroud)