C# 基类中的基类构造函数,而不是C中的派生类#

C# 基类中的基类构造函数,而不是C中的派生类#,c#,constructor,abstract-class,C#,Constructor,Abstract Class,我正在学习如何在C#中正确应用OO原则。我遇到了一个小问题,我不知道如何解决它。我遇到了以下问题: 当前情况: public abstract class Foo { protected Foo() { //does nothing } } public class Bar : Foo { public BarX ( int a, int b, int c) : base() { this.a = a; t

我正在学习如何在C#中正确应用OO原则。我遇到了一个小问题,我不知道如何解决它。我遇到了以下问题:

当前情况:

public abstract class Foo
{
    protected Foo()
    {
        //does nothing
    }
}

public class Bar : Foo
{
    public BarX ( int a, int b, int c) : base()
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public doStuff()
    {
        //does stuff
    }
}

public class BarY : Foo
{
    public Bar( int a, int b, int c) : base()
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public doStuff()
    {
        //does stuff
    }
}
关键是我有不同类型的
Foo
。在这种情况下,它将是圆形和矩形。我希望它们具有相同的构造函数,因为每个类型都具有相同的属性。它们只有不同的
doStuff()
方法。我尝试了许多组合,但每次我尝试将参数移动到基类的构造函数时,它都会告诉我“某些类不包含接受0个参数(或3个参数)的构造函数,这取决于我在代码中的移动方式。”


我的问题是如何将a、b和c的值的赋值移动到抽象类的构造函数中?

以下操作将起作用:

public abstract class Foo
{
    protected Foo(int a, int b, int c)
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public abstract void doStuff();
}

public class Bar : Foo
{
    public Bar(int a, int b, int c) : base(a, b, c)
    {
    }

    public override void doStuff()
    {
        //does stuff
    }
}


public class BarY : Foo
{
    public BarY(int a, int b, int c) : base(a, b, c)
    {
    }

    public override void doStuff()
    {
        //does stuff
    }
}

这是因为
BarY
BarX
正在调用一个默认构造函数(
base()
),当您只有一个参数化构造函数时,它在基类中不存在。您还需要传递参数(
base(a,b,c)
):


我算出了:)我需要在基类中添加参数,我需要在de派生类中的链接中添加参数:
BarX(inta,intb,intc):base(a,b,c){…}
Daniel Hilgarth更快,所以我将他的解决方案标记为答案。我仍然感谢你的努力和正确的答案:)
public abstract class Foo
{
    protected Foo(int a, int b, int c) 
    {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    public abstract void doStuff();
}

public class Bar : Foo
{
    public BarX (int a, int b, int c) : base(a, b, c)
    {

    }

    public override void doStuff()
    {
        //does stuff
    }
}

public class BarY : Foo
{
    public Bar(int a, int b, int c) : base(a, b, c)
    {

    }

    public override void doStuff()
    {
        //does stuff
    }
}