abstract-抽象类

作者在 2008-05-02 14:09:56 发布以下内容

abstract修饰符可以和类,方法,属性,索引器及事件一起使用,在类中声明使用abstract修饰符以指示某个类只能是其他类的基类。标记抽象或包含在抽象类中的成员必须通过从抽象类派生出来的类实现。

抽象类是隐式的虚方法,

只允许在抽象类中使用抽象方法,

因为抽象类不提供实现的实体,所以没有方法体,方法的声明只以一个分号结束,并且在签名后没有( {} ),实现由重写方法提供(继承类中 override修饰)。

抽象类不能实例化,

抽象方法不能是私有的,

不能在抽象方法中使用static和virtual关键字。

不要在抽象类中定义公共的(public)和受保护的构造函数(pretected internal),可见性的构造函数只能用于实例化的类型,而抽象类是不能实例化的。

应在抽象类中使用pretected 或 private 构造函数,在派生类的构造函数中调用基类的构造函数。

 

using System;
abstract class A
{
 protected int x;
 public abstract void F();//抽象方法
 public abstract int X //抽象属性
 {
  get ;
  set ;
 }
}
class B : A
{
 public override void F()
 {
  Console.WriteLine("B.F");
 }
 public override int X
 {
  get { return x; }
  set { x=value; }
 }
}
class test
{
 static void Main()
 {
  B a=new B();
  a.F();
  a.X=20;
  Console.WriteLine(a.X);
 }
}

 

C#基础 | 阅读 1540 次
文章评论,共1条
fanneysky(作者)
2008-05-02 15:16
1
using System;
abstract class Employee
{
    //不能被实例化,要用protected以便被子类调用,不能用public;如不需要被访问则用private
    protected string name;
    protected Employee() {}
    protected Employee(string Name) 
    {
        name=Name;
    }

    public abstract void StarWork(); //
}
class manager : Employee
{
     //调用基类的构造函数
    public manager(string Name) : base(Name) {} //调用基类的构造函数
    public override void StarWork()
    {
        Console.WriteLine(name+" 经理");
    }
}
class emp : Employee
{
     //调用基类的构造函数
    public emp(string Name) : base(Name) {}
    public override void StarWork()
    {
        Console.WriteLine(name+" 普通员工");
    }
}
class seller : Employee
{
    public seller(string name) : base(name) {} 
    public override void StarWork()
    {
        Console.WriteLine(name+" 销售员");
    }
}
class accouter : Employee
{
    public accouter(string name) : base(name) {}
    public override void StarWork()
    {
        Console.WriteLine(name+" 财务员");
    }
}
class secretary : Employee
{
    public secretary(string name) : base(name) {}
    public override void StarWork()
    {
        Console.WriteLine(name+" 秘书");
    }
}
class test
{
    static void Main()
    {
        Employee[] a=new Employee[5]; //? 创建一个引用,没有被实例化吗?
        a[0]=new manager("张三");
        a[1]=new seller("王五");
        a[2]=new seller("王五");
        a[3]=new accouter("马六");
        a[4]=new secretary("梦七");
        foreach(Employee r in a)
        {
            r.StarWork();
        }
        
    }
}
游客请输入验证码
浏览19886次