新手遇到棘手问题,代码编译成DLL文件时提示System.Drawing.Point.x由于受保护所以禁止访问
请高手帮忙,代码如下:
using System;
using System.Drawing;
public abstract class Shape
{
protected string name;
protected Color color;
protected Point position;
//public Point position;
protected float linewidth; public string Name
{
get
{
return name;
}
set
{
name=value;
}
}
public Color Color
{
get
{
return color;
}
set
{
color=value;
}
}
public Point Position
{
get
{
return position;
}
set
{
position=value;
}
}
public float Linewidth
{
get
{
return linewidth;
}
set
{
linewidth=value;
}
}
public abstract double Area{get;}
public abstract void Draw(Graphics g);
}
public class Ellipse:Shape
{
protected int semimajoraxis;
protected int semiminoraxis;
public virtual int Semimajoraxis
{
get
{
return semimajoraxis;
}
set
{
semimajoraxis=value;
}
}
public virtual int Semiminoraxis
{
get
{
return semiminoraxis;
}
set
{
semiminoraxis=value;
}
}
public override double Area//椭圆面积是pi*a*b;
{
get
{
return (Math.PI*Semimajoraxis*Semiminoraxis);
}
}
public override void Draw(Graphics g)
{
Pen pen=new Pen(Color,linewidth);
g.DrawEllipse(pen,Position.x,Position.y,2*Semimajoraxis,2*Semiminoraxis);
}
}
public class Rectangle:Shape
{
protected int height,width;
public virtual int Height
{
get
{
return height;
}
set
{
height=value;
}
}
public virtual int Width
{
get
{
return width;
}
set
{
width=value;
}
}
public override double  Area
{
get
{
return (Height*Width);
}
}
public override void Draw(Graphics g)
{
Pen pen=new Pen(Color,Linewidth);
g.DrawRectangle(pen,Position.x,Position.y);
}
}
public class Triangle:Shape
{
protected Point point1;
protected Point point2;
public Point Point1
{
get
{
return point1;
}
set
{
point1=value;
}
}
public Point Point2
{
get
{
return Point2;
}
set
{
point2=value;
}
}
public double[] side
{
get
{
double[] side=new double[3];
side[0]=Math.Sqrt((Point1.x-Position.x)*(Point1.x-Position.x)+(Point1.y-Position.y)*(Point1.y-Position.y));
side[1]=Math.Sqrt((Point2.x-Point1.x)*(Point2.x-Point1.x)+(Point2.y-Point1.y)*(Point2.y-Point1.y));
side[2]=Math.Sqrt((Position.x-Point2.x)*(Position.x-Point2.x)+(Position.y-Point2.y)*(Position.y-Point2.y));
return side;
}
}
public override double Area
{
get
{
return((Math.Abs( *Point1.y-Point1.x*Position.y)+Math.Abs(Point1.x*Point2.y-Point2.x*Point1.y)+Math.Abs(Position.x*Point2.y-Position.x*Point2.y))/2.0);
} }
public override void Draw(Graphics g)
{
Pen pen=new Pen(Color,Linewidth);
Point[] points={Position,Point1,Point2};
g.DrawPolygon(pen,points);
}
}
public class Circle:Ellipse
{
public override int Semimajoraxis
{
get
{
return semimajoraxis;
}
set
{
semimajoraxis = value;
semiminoraxis = value;
}
}
public override int Semiminoraxis
{
get
{
return Semiminoraxis;
}
set
{
Semiminoraxis=value;
}
}
public int Radius
{
get
{
return Semiminoraxis;
}
set
{
Semiminoraxis=value;
}
}
}
public class Square:Rectangle
{
public override int Height
{
get
{
return height;
}
set
{
height=value;
width=value;
}
}
public override int Width
{
get
{
return Height;
}
set
{
Height=value;
}
}
public int Side
{
get
{
return Height;
}
set
{
Height=value;
}
}}

解决方案 »

  1.   

    你是用Java语法写的吧?换成C++的语法试试!
      

  2.   

    好长啊...感觉应该是访问限制修饰符的问题,
    把protected 全部改成public试试
      

  3.   

    首先先谢谢上面两位朋友出来说话,但是第一,我哪好象不是JAVA语法吧,应该是正宗的C#语法,其次,我觉得特别郁闷,因为我刚开始也想到可能是protected的问题,但是你没看到我在下面一行有一个打着双斜线的public那行吗?我换成 public还是不行,所以就觉得不是一般的郁闷,再有别看我这些代码看着长,但其实只是入门级的一段代码,这段代码的意思是首先定义一个画图基类,然后定义椭圆,矩形,三角形这三个类是继承基类的,最后做圆形继承椭圆,正方形继承矩形!其实代码很简单,但问题却很郁闷!
      

  4.   

    g.DrawEllipse(pen,Position.x,Position.y,2*Semimajoraxis,2*Semiminoraxis);Position.x, Position.y确实是私有变量.注意一下区别:
    Position.X, Position.Y这才是公有的.
      

  5.   

    谢谢上面那位叫 沉默之狼 的朋友,我光注意Point要大写了,忽略了X也要区分大小写了!
    现在我的问题解决了,谢谢你啊。我第一次来还不知道应该怎么给你分呢!