3

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

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()" 这次不需要任何保护级别。有任何想法吗?

4

3 回答 3

6
CPolygon() {} 

那是一个private构造函数。
你不能在课堂外调用它。

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

于 2012-10-15T16:30:03.377 回答
4

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

于 2012-10-15T16:32:01.517 回答
0

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

于 2012-10-15T16:33:01.297 回答