gpt4 book ai didi

c# - 抽象方法中的可选参数?是否可以?

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:03 25 4
gpt4 key购买 nike

我有一个抽象基类。

我有 2 个来自该基类的派生类。

我的某个类是否可以忽略抽象覆盖用法中的字符串参数?还是我只需要发送一个空白的并忽略它? (使可读性略有下降)

我能否拥有一个具有某种可选参数的函数,以便编译以下两个派生类?

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());
}
}

最佳答案

如果你不是绝对需要 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());
}
}

否则,如果它必须是抽象的以确保它被实现,你仍然可以添加两个版本,它只会让继承者更加冗长:

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());
}
}

关于c# - 抽象方法中的可选参数?是否可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19800652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com