[英]Passing data to overridden base method in C#
有點愚蠢的問題,但我想知道將數據從返回到重寫的基本方法的可接受方式是在c#中。
我想我能做到:
class A
{
int x;
public virtual void DoStuff() {
Console.WriteLine(x);
}
}
class B : A
{
public override void DoStuff() {
x = 1;
base.DoStuff();
}
}
但是有沒有更好的方法,例如不需要使用成員變量?
一種解決方案可能涉及使用受保護的方法,該方法具有重用來自基類的代碼的參數。
class A
{
public virtual void DoStuff() {
DoStuffInternal(0);
}
protected void DoStuffInternal(int x) {
Console.WriteLine(x);
}
}
class B : A
{
public override void DoStuff() {
DoStuffInternal(1);
}
}
為什么不使用參數?
class A
{
public virtual void DoStuff(int x) {
Console.WriteLine(x);
}
}
class B : A
{
public override void DoStuff(int x) {
//do stuff
int y = 1
base.DoStuff(y);
}
}
怎么樣
abstract class A
{
protected abstract int X { get; }
public void DoStuff() {
Console.WriteLine(X);
}
}
class B : A
{
protected override int X { get { return 1; } }
}
你可以使用像Template Method設計模式這樣的東西:
class A
{
public void DoStuff() {
var x = DoGetX();
Console.WriteLine(x);
}
protected abstract int DoGetX();
}
class B : A
{
protected override int DoGetX() {
return 1;
}
}
對於幾乎每個開發人員屬性看起來像字段的簡單包裝,我們知道沒有像虛擬字段這樣的東西。 所以我認為,抽象方法是更在這種情況下,最好的解決方案(我們已經討論過的屬性和方法之間的差異在這里 )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.