苏飞论坛

标题: C#abstract抽象类或者方法的用法实例 [打印本页]

作者: 站长苏飞    时间: 2013-3-27 13:58
标题: C#abstract抽象类或者方法的用法实例
abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。
例子如下
[code=csharp] abstract class ShapesClass
    {
        abstract public int Area();
        public abstract string Description { get; }
    }
    class Square : ShapesClass
    {
        int x, y;
        // Not providing an Area method results
        // in a compile-time error.
        public override int Area()
        {
            return x * y;
        }
        public override string Description
        {
            get
            {
                return string.Empty;
            }
        }
    }[/code]

官方例子
抽象类具有以下特性:
在方法或属性声明中使用 abstract 修饰符以指示方法或属性不包含实现。
抽象方法具有以下特性:
除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。
抽象类必须为所有接口成员提供实现。
实现接口的抽象类可以将接口方法映射到抽象方法上。例如:
[code=csharp]interface I
{
    void M();
}
abstract class C: I
{
    public abstract void M();
}[/code]

                    
示例
在本例中,DerivedClass 类是从抽象类 BaseClass 派生的。抽象类包含一个抽象方法 AbstractMethod 和两个抽象属性 X 和 Y。
[code=csharp]// abstract_keyword.cs
// Abstract Classes
using System;
abstract class BaseClass   // Abstract class
{
    protected int _x = 100;
    protected int _y = 150;
    public abstract void AbstractMethod();   // Abstract method
    public abstract int X    { get; }
    public abstract int Y    { get; }
}

class DerivedClass : BaseClass
{
    public override void AbstractMethod()
    {
        _x++;
        _y++;
    }

    public override int X   // overriding property
    {
        get
        {
            return _x + 10;
        }
    }

    public override int Y   // overriding property
    {
        get
        {
            return _y + 10;
        }
    }

    static void Main()
    {
        DerivedClass o = new DerivedClass();
        o.AbstractMethod();
        Console.WriteLine("x = {0}, y = {1}", o.X, o.Y);
    }
}[/code]
      
输出
  1. x = 111, y = 161
复制代码
注释
在上面的示例中,如果试图通过使用下面的语句将抽象类实例化:
BaseClass bc = new BaseClass();   // Error
将出现错误,指出编译器无法创建抽象类“BaseClass”的实例。





欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4