以下是MSDN上的解释
abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。
abstract class ShapesClass
{
    abstract public int Area();
}
class Square : ShapesClass
{
    int x, y;
    // Not providing an Area method results
    // in a compile-time error.
    public override int Area()
    {
        return x * y;
    }
}问题是:
    在其他地方看到有句这样的说明:“派生类继承抽象类时,它必须实现基类中的所有抽象方法。否则,派生类也必须指定为abstract类型。因此,一直继承abstract属直到获得完整的实现。
    1.上面“否则”之后的话语是否正确?
    2.若是正确的能否用MSDN上的例子接着举例再仔细说明一下(既当Square类不实现Area()而是再写一个继承自Square类的SquareTwo类在后者中再实现Area())Square类又该如何写呢?谢谢!
abstract class ShapesClass
{
    abstract public int Area();
}
class Square : ShapesClass
{
    //此处如何写Area()?
}

class SquareTwo : Shapes
{
    int x, y;    public override int Area()
    {
        return x * y;
    }
}

解决方案 »

  1.   

    这么简单的问题
    1,“否则”后面那段话绝对正确
    2,凡是继承了ShapesClass 里未实现的方法都要重新去实现它里面的方法,如果ShapesClass 里面的方法已经实现了就没必要再去实现。
    3如果SquareTwo继承的是Square 就没必要再去实现Area()里   到g.cn搜索关于抽象类和接口例子一大把
      

  2.   

    Square中要是没有实现Area(),就要将Square定义为抽象类啊,要是实现了就无所谓了如果没有实现,定义为了抽象类,那么在Square的派生类中就一定要实现Area()
      

  3.   

    class Square : ShapesClass 

        //此处如何写Area()? 

    ----------------------
    一定要重写Area方法,就是:public override int Area() 
        { 
            return XXX; 
        } 
      

  4.   

        楼上说的都不错,但是请各位看仔细,我现在的疑惑是有文件指出:“派生类继承抽象类时,它必须实现基类中的所有抽象方法。否则,派生类也必须指定为abstract类型。因此,一直继承abstract属直到获得完整的实现。”
        这里的否则指的是派生类而非基类,我现在遇到的问题是,照上面这段话的理解在下面的程序中
    abstract class ShapesClass 

        abstract public int Area(); 

    class Square : ShapesClass 

        //此处如何写Area()? 

    class SquareTwo : Shapes 

        int x, y;     public override int Area() 
        { 
            return x * y; 
        } 
    } Square类是否必须实现Area()?若要是必须实现的话 “否则,派生类也必须指定为abstract类型。因此,一直继承abstract属直到获得完整的实现”就不正确了,派生类指定abstract时该如何写?既
    abstract class ShapesClass 

        abstract public int Area(); 

    abstract class Square : ShapesClass 

        //此处如何写Area()?是依旧为 “abstract public int Area(); ”?
         //还是必须像下面的SquareTwo类一样去实现它?


    class SquareTwo : Shapes 

        int x, y;     public override int Area() 
        { 
            return x * y; 
        } 
      

  5.   

    因为你没有实现Area这个基类的抽像方法,所以你要么Override这个方法,要么把类定义成Abstract类型的。
      

  6.   

    Square 类一定要重写Area() 方法。
    如果 Square  为一般类,public override int Area();
    你也可以同样把Area()方法定义为抽象方法,abstract public override int Area();
    Square必须被声明为抽象类:abstract class Square
      

  7.   

    abstract class ShapesClass 

        abstract public int Area(); 

    class Square : ShapesClass 

      abstract public int Area();    //这里你只要没有重写ShapesClass类的抽象方法,  abstract public int hright();                    那么                           Square类就要定义为抽象,你还可以定义其他的
        //此处如何写Area()?         方法.也可以使抽象方法
      public int Width()
       {
          
       }

    class SquareTwo : Shapes 

        int x, y;     public override int Area() 
        { 
            return x * y; 
        }