字段就是成员变量
属性:使用 访问器(accessors) 让私有域的值可被读写或操作。
访问器:get set
自动属性就是写的时候只写一个属性,并不写字段,一般情况下也不实现。当有个字段不需要限制访问,为了编程习惯又不想写成公有字段,同时有懒得主动写那个字段名的时候,就使用自动属性吧。
工厂设计模式
工厂类 完成 输入想要的类名 返回相应对象 的操作。
工厂类
class ShapeFactory
{
public Shape createShape(String type)
{
if (type.Equals("circle"))
{
Console.WriteLine("输入半径:");
double r = Convert.ToDouble(Console.ReadLine());
return new Circle(r);
}
else if (type.Equals("triangle"))
{
Console.WriteLine("输入三边长:");
int a = Convert.ToInt32(Console.ReadLine());
int b = Convert.ToInt32(Console.ReadLine());
int c = Convert.ToInt32(Console.ReadLine());
return new Triangle(a, b, c);
}
else if (type.Equals("rectangle"))
{
Console.WriteLine("输入长和宽:");
int a = Convert.ToInt32(Console.ReadLine());
int b = Convert.ToInt32(Console.ReadLine());
return new Rectangle(a, b);
}
else
return null;
}
static void Main(string[] args)
{
ShapeFactory sf = new ShapeFactory();
Shape[] shapes = new Shape[10];
double sumarea = 0;
for(int i = 0; i < 5; i++)
{
Console.WriteLine("输入你要的形状名:");
shapes[i]=sf.createShape(Console.ReadLine());
sumarea += shapes[i].Area();
}
Console.WriteLine("面积之和为:{0}", sumarea);
Console.ReadKey();
}
}
形状类,有计算面积和检查是否合法两个方法
abstract class Shape
{
abstract public double Area();
abstract public bool Check();
}
class Circle : Shape
{
private double radius;
public double Radius { set; get; }
public Circle(double radius)
{
this.radius = radius;
}
override public double Area()
{
return 0.5 * 3.1415926 * radius * radius;
}
override public bool Check()
{
if (radius == 0)
return false;
else
return true;
}
}
class Triangle : Shape
{
private int side1, side2, side3;
public int Side1 { set; get; }
public int Side2 { set; get; }
public int Side3 { set; get; }
public Triangle(int a, int b, int c)
{
this.side1 = a;
this.side2 = b;
this.side3 = c;
if (Check())
Console.WriteLine("三角形构造成功。");
else
Console.WriteLine("三角形构造失败。");
}
override public bool Check()
{
if (side1 + side2 > side3 && side1 + side3 > side2 && side2 + side3 > side1)
{
return true;
}
else
return false;
}
override public double Area()
{
double p = (side1 + side2 + side3) / 2;
return Math.Sqrt(p * (p - side1) * (p - side2) * (p - side3));
}
}
class Rectangle : Shape
{
private int a, b;
public int A { set; get; }
public int B { set; get; }
public Rectangle(int a,int b)
{
this.a = a;
this.b = b;
}
override public bool Check()
{
if (a > 0 && b > 0)
return true;
else
return false;
}
override public double Area()
{
return a * b;
}
}