jor*_*dan 1 c# class derived-class abstract optional-parameters
我有一个抽象基类。
我有2个从该基类派生的类。
无论如何,我的类之一可以忽略抽象覆盖用法中的string参数吗? 还是我只需要发送一个空白的邮件而忽略它?(使可读性略有下降)
我是否可以使用一个具有某种可选参数的函数,以便以下两个派生类都可以编译?
PS-以下代码充满了无法编译的代码,作为我要执行的示例
PS PS-是的,我已经编译了以下代码-有关结果,请参见上面的注释
public abstract class MyBaseClass
{ //optional string?
public abstract void FunctionCall(int i, string s = "");
}
public class MyDerivedClass : MyBaseClass
{
public override void FunctionCall(int i)
{
MessageBox.Show(i.ToString());
}
}
public class YourDerivedClass : MyBaseClass
{
public override void FunctionCall(int i, string s)
{
MessageBox.Show(s + " " + i.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
如果您绝对不需要FunctionCall是抽象的,则可以声明它的两个版本:
public abstract class MyBaseClass
{
public virtual void FunctionCall(int i)
{
this.FunctionCall(i, "");
}
public virtual void FunctionCall(int i, string s)
{
}
}
public class MyDerivedClass : MyBaseClass
{
public override void FunctionCall(int i)
{
MessageBox.Show(i.ToString());
}
}
public class YourDerivedClass : MyBaseClass
{
public override void FunctionCall(int i, string s)
{
MessageBox.Show(s + " " + i.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
否则,如果必须抽象它以确保实现,您仍然可以添加两个版本,这只会使继承者更加冗长:
public abstract class MyBaseClass
{
public abstract void FunctionCall(int i);
public abstract void FunctionCall(int i, string s);
}
public class MyDerivedClass : MyBaseClass
{
public override void FunctionCall(int i, string s)
{
throw new NotImplementedException();
}
public override void FunctionCall(int i)
{
MessageBox.Show(i.ToString());
}
}
public class YourDerivedClass : MyBaseClass
{
public override void FunctionCall(int i)
{
throw new NotImplementedException();
}
public override void FunctionCall(int i, string s)
{
MessageBox.Show(s + " " + i.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)