c#使用属性问题
abstract class Shape{
public abstract double Area
{
get;
set;
}
}
class Square : Shape
{
public double side;
public Square(double s) //constructor
{
side = s;
}
public override double Area
{
get
{
return side * side;
}
set
{
side = System.Math.Sqrt(value);
}
}
}
class Cube : Shape
{
public double side;
public Cube(double s)
{
side = s;
}
public override double Area
{
get
{
return 6 * side * side;
}
set
{
side = System.Math.Sqrt(value / 6);
}
}
}
class TestShapes
{
static void Main()
{
// Input the side:
System.Console.Write("Enter the side: ");
double side = double.Parse(System.Console.ReadLine());
// Compute the areas:
Square s = new Square(side);
Cube c = new Cube(side);
// Display the results:
System.Console.WriteLine("Area of the square = {0:F2}", s.Area);
System.Console.WriteLine("Area of the cube = {0:F2}", c.Area);
System.Console.WriteLine();
// Input the area:
System.Console.Write("Enter the area: ");
double area = double.Parse(System.Console.ReadLine());
// Compute the sides:
s.Area = area;
c.Area = area;
// Display the results:
System.Console.WriteLine("Side of the square = {0:F2}", s.side);
System.Console.WriteLine("Side of the cube = {0:F2}", c.side);
}
}
高手看下代码,在此例中,Cube 和 Square 这两个类实现抽象类 Shape,并重写它的抽象 Area 属性。注意属性上 override 修饰符的使用。程序接受输入的边长并计算正方形和立方体的面积。它还接受输入的面积并计算正方形和立方体的相应边长。
我想问的是如下代码:
public override double Area
{
get
{
return 6 * side * side;
}
set
{
side = System.Math.Sqrt(value / 6);//尤其这句,为什么要除以6?把这个重写给讲解下吧。
}
}
}
--------------------编程问答-------------------- Cube是立方体,有6个面,面积算的是6个面的和;
side是每条边的长度,所以是面积/6是每个面的面积,再开平方求出每条边; --------------------编程问答-------------------- 正方体六个面面积相等,如果求一个面的,就要除6 --------------------编程问答-------------------- --------------------编程问答-------------------- 既然 Area=6 * side * side,那么side 自然等于 System.Math.Sqrt(Area/ 6), --------------------编程问答--------------------
属性的重写,直接加override就可以吗?基类不用像方法那样用virtual修饰? --------------------编程问答--------------------
明白了
补充:.NET技术 , C#