c# 抽象类(转)

C#允许把类和函数声明为abstract,抽象类不能实例化,而抽象函数没有执行代码,必须在非抽象的派生类中重写。显然,抽象函数也是虚拟的(但也不需要提供virtual关键字,实际上,如果提供了该关键字,就会产生一个语法错误)。如果类包含抽象函数,该类将也是抽象的,也必须声明为抽象的:

abstract class Building

{

   public abstract decimal CalculateHeatingCost();   // abstract method

}

C++开发人员要注意C#中的一些语法区别。C#不支持采用=0语法来声明抽象函数。在C#中,这个语法有误导作用,因为可以在类声明的成员字段上使用=<value>,提供初始值:

abstract class Building

{

   private bool damaged = false;   // field

   public abstract decimal CalculateHeatingCost();   // abstract method

}

注意:

C++开发人员还要注意术语上的细微差别:在C++中,抽象函数常常声明为纯虚函数,而在C#中,仅使用抽象这个术语。

 

C#中的抽象类

 

1、声明一个抽象方法使用abstract关键字。
2、一个类中可以包含一个或多个抽象方法。
3、抽象类中可以存在非抽象的方法。
4、抽象类不能被直接被实例化。
5、实现抽象类用“:”(冒号),实现抽象方法用override关键字。
6、抽象类可以被抽象类所继承,结果仍是抽象类。
7、抽象方法被实现后,不能更改修饰符。

DEMO:
    public abstract class Person
    {
        public abstract void SayHello();
        public void about()
        {
            Console.WriteLine("Abstract Demo");
        }

 }

    public class Student : Person
    {
        public override void SayHello()
        {
            Console.WriteLine("SayHello");
        }
    }
    class MainClass
    {
        public static void Main()
        {
            new Student().SayHello();
        }
    }

 

 

c#里面用抽象方法实现多态性

 

c#是一种面向对象的语言,其重要的特点就是体现在他可以让程序员灵活的运用自己的思路和方法,最大可能让程序员能够自由的设计自己的程序,而多态的运用正式体现这一点。请看下面一个例子:
   
public class abstract operate()
       {   
             protected string a,b;
             public operate(string _a,_b)  
             {
                   this.a=_a;
                   this.b=_b;
             }
             public abstract string op(); //定义抽象函数;在字类中实现;
       }
    public class sum():operate()
          {
            sum():base(string a,string b);              //调用父类的析造函数初始化数据;
             public string op(string a,string b)
                {
                      return a+b;
                }
          }
    public class sub():operate()
          {
                sub:base(string a,string b);
                public string op(string a,string b)
                {
                      return a-b;
                }
          }
       public class muli():operate()
          {
                sub:base(string a,string b)
                public string op(string a,string b)
              {
                     return a*b;
                }
          }
          public realize()
          {
                operate   sum=new sum(string a,string b); //调用sum类;
                string result1=sum.op();
                operate sub=new sub(string a,string b);   //调用sub类;
                string result2=sub.op();
                  operate mul=new mul(string a,string b);//调用mul类;
                   string result3=mul.op();
                   console.write("the firstnumber       {0}            second       {1}               third          {2}",result2,result2,result3);
               }
                  
               
          }

 

 

posted @ 2012-04-21 11:35  sidihu  阅读(385)  评论(0编辑  收藏  举报