在我的项目中,我在派生类中有一些函数是相同的,除了一个不同的部分。
我想将方法提升到基类。
函数看起来像这样:
func(parameters)
{
//COMMON BITS
if (someVar == "value1") { htmlFilename = line; }
else if (someVar == "value2") { subVideoLink = line; }
else if (someVar == "value3") { linksH2HeadingWritten = true; }
//COMMON BITS
}
其中不同函数的中心线看起来都像上面一样,但“someVar”的值不同,“variable = line”中的变量不同。格式。
这是一般化形式:
if (someVar == "CommandName") { variable = line; }
我的想法是将函数发送给Dictionary<string CommandName, ref string>
...但是我似乎无法在其中创建带有ref字符串的字典...
然后我会删除'变量'的布尔情况,方法是将它们替换为值为“true”或“false”的字符串版本。
有更好的方法吗?
答案 0 :(得分:4)
更好的方法是在virtual
中调用的基类中定义abstract
(或func
)方法。然后在每个子类中,您可以使用特定指令覆盖该方法,func
将使用子类的行为。
public class MyBase
{
protected virtual void DoCommand() { throw new NotImplementedException(); }
public void Func()
{
...
DoCommand();
...
}
}
public class MySubClass : MyBase
{
protected override void DoCommand()
{
...
}
}
答案 1 :(得分:0)
您应该在基类上创建一个可覆盖的方法:
abstract func(parameters);
在派生类上实现它:
class CommandN {
...
func(parameters)
{ htmlfilename = line; }
}
class CommandSubVideoLinkX {
...
func(parameters)
{ subVideoLink = line; }
}
等等。
答案 2 :(得分:0)
如果我理解你正在尝试做什么,你可以减少
if (activeCommand.GetType().Name == "CommandName") { variable = line; }
下至:
if (activeCommand is CommandType ) { /*logic, cast if necessary*/ }
当你有一个带基类的函数但是为派生类型执行特殊情况时非常有用。这也可以处理另一种类型派生自CommandType的情况。