繁体   English   中英

C#多态性错误:由于其保护级别而无法访问

[英]C# Polymorphism Error : is inaccessible due to its protection level

我正在尝试一个多态示例,但是我的代码中出现以下错误:

public class CPolygon 
{
    CPolygon() {} 
    public int width {get; set;} 
    public int height {get; set;}        
    public virtual int area(){ return 0; } 
}

class CRectangle: CPolygon 
{ 
    public CRectangle() {} //'Lista.CPolygon.CPolygon()' is inaccessible due to its protection level

    public override int area ()
    { 
        return (width * height); 
    }
}

class CTriangle: CPolygon //'Lista.CPolygon.CPolygon()' is inaccessible due to its protection level
{
    CTriangle() {} 

    public override int area ()
    { 
        return (width * height / 2); 
    }
}

static void Main(string[] args)
{
    CTriangle triangle= new CTriangle();
    triangle.height=5;
    triangle.width=6;
    int area1 = triangle.area();
}

我得到一个错误,即派生类构造函数“由于其保护级别而无法访问”。 我不知道为什么。 我用隐式派生构造函数工作的另一个例子。

abstract class Shape
{
    public Shape(string name = "NoName")
    { PetName = name; }
    public string PetName { get; set; }
    public abstract void Draw();
}

class Circle : Shape
{
    public Circle() {}
    public Circle(string name) : base(name) {}
    public override void Draw()
    {
    Console.WriteLine("Drawing {0} the Circle", PetName);
    }
}

class Hexagon : Shape
{
    public Hexagon() {}
    public Hexagon(string name) : base(name) {}
    public override void Draw()
    {
    Console.WriteLine("Drawing {0} the Hexagon", PetName);
    }
}

这有效并且具有几乎相同的代码。 构造函数“ Circle()”,“ Hexagon()”这次不需要任何保护级别。 有任何想法吗?

CPolygon() {} 

那是一个private构造函数。
您不能在课堂外称呼它。

由于派生类必须始终从其基类调用构造函数,因此会出现错误。

C#的默认符号可见性是私有的。 如果不将“ public”放在类或函数定义的前面,则它具有私有可见性,这意味着其他任何类都看不到该符号。

CPolygon类是Public,但是您没有为CRectangle和CTriangle定义保护级别,如果将两个派生类设置为public,仍然会收到错误消息吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM