2012-10-15 31 views
3

我試圖多態性的例子,但我在我的代碼以下錯誤:C#多態性錯誤:無法訪問由於其保護級別

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()」這次不需要任何保護級別。有任何想法嗎?

+0

.Net類名不應以'C'開頭 – SLaks

+0

請在問題中正確地格式化您的代碼。用戶適當的意圖。 –

+0

重複:http://stackoverflow.com/questions/5326057/why-am-i-getting-an-inaccessible-due-to-protection-level-error – kmote

回答

6
CPolygon() {} 

這是一個private構造函數。
你不能在課堂外叫它。

由於派生類必須始終從其基類調用構造函數,因此會出現錯誤。

+1

在此基礎上,您還可以創建一個類'protected'爲了允許更多的訪問限制,而不是將所有標記爲'public' http://msdn.microsoft.com/en-us/library/bcd5672a%28v=vs.110%29.aspx – dgarbacz

4

C#的默認符號可見性是私有的。如果您不在類或函數定義之前放置「public」,則它具有私有可見性,這意味着沒有其他類可以看到該符號。

+0

好吧,我解決了它。我在CPolygon之前加了「public」() –

+0

public CPolygon() –

+0

public CRectangle() –

0

CPolygon類是公共的,但您還沒有定義CRectangle和CTriangle的保護級別,如果您將這兩個派生類公開,您仍然會得到錯誤嗎?

相關問題