由于保护级别c#class

时间:2016-11-12 04:19:41

标签: c# inheritance

我正在构建一些带继承的类,使用派生类方法,我在应用程序中遇到了保护问题。以下是其中一个获取错误的类的源代码。

CODE:

class Cone : Circle
{
private double height;  // Data members

public Cone() : base()  // Default constructor with explicit call
{                           // to base (Circle) default constructor  
  this.Label = "Unlabeled Cone";
  this.height = 0.0;
}



public Cone(Point centerValue, double radiusValue, double heightValue):   
                base(centerValue, radiusValue)  // Initializing constructor with explicit    
{                                               // call to base (Circle) initializing construtor
  this.Label = "Unlabeled Cone";
  this.Height = heightValue;
}

public Cone(Point centerValue, double radiusValue, double heightValue, string labelValue):   
                base(centerValue, radiusValue, labelValue)  // Initializing constructor with explicit    
{                                                           // call to base (Circle) initializing construtor
  this.Height = heightValue;
}

public Cone(Cone sourceCone)  // Copy constructor
{
  this.Copy(sourceCone);
}

public double Height  // Define read/write Height property
{
  get
  {
    return this.height;
  }
  set
  {
    if (value >= 0.0)
      this.height = value;
    else
    {
      Console.WriteLine("Runtime error: {0} can not be assigned to a Height property\n", value);
      ConsoleApp.Exit();
    }
  }
}

以下是它的派生类:

public class Circle : object
{

private Point  center;  // Data member
private double radius;  // Data member
private string label;   // Data member

public Circle() 
{                 
  this.center = new Point();
  this.radius = 0.0;
  this.label = "Unlabeled Circle";
}

public Circle(Point centerValue, double radiusValue)    
{
  this.center = new Point(centerValue);
  this.Radius = radiusValue;
  this.label  = "Unlabeled Circle";
}

public Circle(Point centerValue, double radiusValue, string labelValue)   
{
  this.center = new Point(centerValue);
  this.Radius = radiusValue;
  this.Label  = labelValue;
}

public Circle(Circle sourceCircle)  // Copy constructor
{
  this.center = new Point();
  this.Copy(sourceCircle);
}

public Point Center  // Define read/write Center property
{
  get 
  {  
    return this.center;
  }
  set
  {
    this.center = value.Clone();
  }
}

这些类在数量,区域和更多内容中添加的时间更长,但在我的控制台应用程序中,我一直认为由于其保护级别而无法访问Cone。我很难看到某些东西是私密的,这使得它无法从控制台应用程序访问。如果您想查看完整的类代码,请使用pastebin ... sourcecode

2 个答案:

答案 0 :(得分:0)

您的班级声明没有辅助功能级别:

class Cone : Circle

如果您未提供访问级别,则默认为可访问级别最低(限制最多)。使用:

public class Cone

答案 1 :(得分:0)

如果锥体类位于不同的命名空间或内部,如果它们位于同一命名空间中,则将其声明为public。

我建议你将它们放在一个单独的文件夹中(因为它们都是形状)并在你的代码中导入使用它的特定命名空间。