[英]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.