Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在尝试实现运行时多态性时,如何访问派生类中基类的受保护变量?_C#_Constructor_Polymorphism_Abstract Class_Overriding - Fatal编程技术网

C# 在尝试实现运行时多态性时,如何访问派生类中基类的受保护变量?

C# 在尝试实现运行时多态性时,如何访问派生类中基类的受保护变量?,c#,constructor,polymorphism,abstract-class,overriding,C#,Constructor,Polymorphism,Abstract Class,Overriding,在这段代码中,我想实现运行时的多态性,并希望使用 我在figure类中为矩形定义的宽度变量 和方形类(矩形为1周长,圆形为1周长) 计算面积和周长(基本上要增加 C#的可重用性特性),但我不知道该怎么做# 您必须以稍微不同的方式定义类。您需要在每个新构造函数中定义width参数,然后将其传递给基本构造函数 class Rectangle:figure { int h; public Rectangle(int h, int w):base(w) { this.h

在这段代码中,我想实现运行时的多态性,并希望使用 我在figure类中为矩形定义的宽度变量 和方形类(矩形为1周长,圆形为1周长) 计算面积和周长(基本上要增加 C#的可重用性特性),但我不知道该怎么做#


您必须以稍微不同的方式定义类。您需要在每个新构造函数中定义
width
参数,然后将其传递给基本构造函数

class Rectangle:figure
{
   int  h;
   public Rectangle(int h, int w):base(w)
   {
      this.h = h;
   }
....

class Circle:figure
{
    public Circle(int w) :base(w)
    {
    }
....
请注意,在您的示例中,您仅使用一个参数实例化了
矩形
,但现在必须同时设置高度和宽度:

figure f = new Rectangle(10 , 20);
figure f1 = new Circle(20);

因此,每次我想在派生类中使用基类变量时,我都必须声明它是派生类的周长,以及base?@ofirf。如果我理解正确,那么是的。你必须在派生构造函数中声明它,并将其传递给基类构造函数。毕竟你实例化了派生类,所以这是定义它的地方。Un幸运的是,构造函数是唯一不会自动从基类继承的方法。在每个派生类中,您必须手动实现构造函数继承。
figure f = new Rectangle(10 , 20);
figure f1 = new Circle(20);