当前位置:编程学习 > C#/ASP.NET >>

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), --------------------编程问答--------------------
引用 2 楼  的回复:
正方体六个面面积相等,如果求一个面的,就要除6

属性的重写,直接加override就可以吗?基类不用像方法那样用virtual修饰? --------------------编程问答--------------------
引用 1 楼  的回复:
Cube是立方体,有6个面,面积算的是6个面的和;
side是每条边的长度,所以是面积/6是每个面的面积,再开平方求出每条边;

明白了
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,