如果一个类不与具体的事物相联系,而只是表达一种抽象的概念,仅仅是作为其派生类的一个基类,这样的类就是抽象类,在抽象类中声明方法时,如果加上abstract时就是抽象方法
为榕城等地区用户提供了全套网页设计制作服务,及榕城网站建设行业解决方案。主营业务为成都网站设计、网站制作、外贸营销网站建设、榕城网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!抽象类概述及声明
抽象类与非抽象类的主要区别:
①.抽象类不能直接被实例化;
②.抽象类中可以只有抽象方法,也可以只有非抽象方法,也可以抽象方法、非抽象方法都有。(非抽象 类中不能有抽象方法);
③.抽象类不能被密封。
以上会在下面例子中一一验证:
class Program { static void Main(string[] args) { M m = new M();//错误提示:无法创建抽象类或接口M的实例。验证了①,抽象类和接口不能被实例化 } } public abstract class M { public void A() { Console.WriteLine("调用了A方法"); } public abstract void B() //错误提示:M.B()无法声明主体,因为它标记为abstract。也就是说,抽象方 法不能有方法体。 { Console.WriteLine("调用了B方法"); } public abstract void G(); } public class C { public abstract void H();//错误提示:C.D()是抽象的,但它包含在非抽象类C中。再对比 M 类中的方法A()、B()来看,就验证了②:非抽象类中不能有抽象方法;抽象类中可以只有抽象方法,也可以只有非抽象方法,也可以抽象方法、非抽象方法都有。 public void D() { } } public sealed abstract class E //错误提示:E 是抽象类,它不能是密封(sealed)或静态(static)的。这就验证了③。 { } public static abstract class F //错误提示:F 是抽象类,它不能是密封(sealed)或静态(static)的。这就验证了③。 { }
2.抽象方法概述及声明
声明抽象方法时需注意:
①.抽象方法必须声明在抽象类中(上面已经验证);
②.声明抽象方法时,不能使用virtual、static、private、sealed修饰符;
③.在抽象类中抽象方法不提供实现。
下面例子中会一一验证:
class Program { static void Main(string[] args) { } } public abstract class M { public abstract void A(); public virtual abstract void B();//错误提示:抽象方法 B 不能标记为 virtual。因为虚方法和抽象方法属于同一个等级的,并列关系。 public static abstract void C();//错误提示:静态成员 C不能标记为overrid、virtual或abstract。 private abstract void D(); //错误提示:虚拟成员或抽象成员不能是私有的。因为虚拟成员是让继承类来override的,如果是private,继承类都不能看见;抽象方法要是私有的话,这个抽象方法所在的抽象类的子类就没法实现这个抽象方法,看不见。 A();//抽象方法在自己的抽象类中不能有方法体,所以不能在本类中实现。要在继承类中实现。 }
3.抽象类与抽象方法的使用
直接举例子:
using System; using System.Collections.Generic; using System.Text; namespace _ { public abstract class myClass { private string id = ""; private string name = ""; ////// 编号属性及实现 /// public string ID { get { return id; } set { id = value; } } ////// 姓名属性及实现 /// public string Name { get { return name; } set { name = value; } } ////// 抽象方法,用来输出信息 /// public abstract void ShowInfo(); } public class DriveClass:myClass //继承抽象类 { ////// 重写抽象类中输出信息的方法 /// public override void ShowInfo() { Console.WriteLine(ID + " " + Name); } } class Program { static void Main(string[] args) { //实例化派生类 DriveClass driveclass = new DriveClass(); //使用派生类对象实例化抽象类 myClass myclass = driveclass; //使用抽象类对象访问抽象类中的编号属性 myclass.ID = "BH0001"; //使用抽象类对象访问抽象类中的姓名属性 myclass.Name = "TM"; //使用抽象类对象调用抽象类中的的抽象方法 myclass.ShowInfo(); } } }
上例中通过派生类的对象driveclass来实例化抽象类,然后使用抽象类访问抽象类中的属性及方法。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。