C# 抽象类,抽象属性,抽象方法(实例讲解)

抽象类往往用来表征对问题领域进行分析、设计中得出的抽象概念,是对一系列看上去不同,但是本质上相同的具体概念的抽象。

下面我们以水果为例,首先定义抽象类Fruit,抽象类中有公共属性vendor,抽象属性Price和抽象方法GrowInArea,

public abstract class Fruit
  {
    public string vendor { get; set; } //默认为private

    public abstract float Price { get; } //抽象属性必须是公有的
    public abstract void GrowInArea(); //抽象方法必须是公有的
  }

下面定义一个Apple类,继承抽象类

public class Apple : Fruit
  {
    public override float Price
    {
      get
      {
        if (vendor == "红富士")
          return 100;
        else
          return 0;
      }
    }
    public override void GrowInArea()
    {
      Console.WriteLine("我在南方北方都能生长,我的生产商是:" + vendor + ",我现在的价格是:" + Price);
    }
  }

子类继承抽象类,需要override抽象类中的抽象属性和抽象方法,如果有未override的,则子类也必须为抽象类

再定义个Orange类

public class Orange : Fruit
  {
    public override float Price
    {
      get
      {
        return 0;
      }
    }
    public override void GrowInArea()
    {
      Console.WriteLine("我只能生长在南方,我的生产商是:" + vendor + ",我的价格是:" + Price);
    }
  }

在main函数中输入

static void Main(string[] args)
    {
      Fruit f = new Apple();
      f.vendor = "红富士";
      f.GrowInArea();
      f = new Orange();
      f.vendor = "柑橘";
      f.GrowInArea();
      Console.ReadKey();
    }

输出结果如下:

总结:

1、抽象类中的抽象属性和抽象方法必须是公有的,因此必须有public修饰符

2、子类必须override抽象类中的所有抽象属性和抽象方法,如果没有全部override,那么子类必须是抽象类

3、抽象类中可以有非抽象属性和非抽象方法,也可以是私有或者公有,但是如果是私有的话子类就不能访问,无意义,所以一般情况下都设置为公有

4、有抽象方法或抽象属性的类一定是抽象类,抽象类中的属性或方法不一定都是抽象的

以上这篇C# 抽象类,抽象属性,抽象方法(实例讲解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • C#抽象类和接口的区别分析

    很多C#的初学者在编程时都容易把抽象类和接口搞混,本文就为大家从概念上讲解抽象类和接口的区别: 一.抽象类: 含有abstract修饰符的class即为抽象类,抽象类是特殊的类,只是不能被实例化,可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖. 二.接口: 接口是

  • 基于C#的抽象类别详解

    抽象类,有3个特点: 第1个,不能被实例化. 第2个,类中的抽象方法在继承的子类中必须重写. 第3个,类一旦有抽象方法出现,那这个类必须定义为抽象类. 现实开发中,发现有共同的代码,可以把这些共同的代码放在一个抽象类中.举个例子,计算四边形的周长. 矩形,长方形,正方形: class Rectangle { private double _A; public double A { get { return _A; } set { _A = value; } } private double _B

  • 轻松学习C#的抽象类

    在C#语言中有一种特殊的基类,那就是抽象类.有时候,基类并不与具体的事物联系,而是只是表达一种抽象的概念,用于为它的派生类提供一个公共的界面.为此,C#中引入了抽象类和抽象方法的概念.        抽象类概述        抽象类提供多个派生类共享基类的公共定义,它既可以提供抽象方法,也可以提供非抽象方法.抽象类不能实例化,必须通过继承由派生类实现其抽象方法,因此对抽象类不能使用new关键字,也不能被密封.如果派生类没有实现所有的抽象方法,则该派生类也必须声明为抽象类.另外,实现抽象方法由ov

  • 深入解析C#中的abstract抽象类

    抽象类和类成员 通过在类定义前面放置关键字 abstract,可以将类声明为抽象类.例如: public abstract class A { // Class members here. } 抽象类不能实例化.抽象类的用途是提供一个可供多个派生类共享的通用基类定义.例如,类库可以定义一个抽象类,将其用作多个类库函数的参数,并要求使用该库的程序员通过创建派生类来提供自己的类实现. 抽象类也可以定义抽象方法.方法是将关键字 abstract 添加到方法的返回类型的前面.例如: public abs

  • C#中抽象类与接口的区别详解

    1.面向接口编程和面向对象编程是什么关系 首先,面向接口编程和面向对象编程并不是平级的,它并不是比面向对象编程更先进的一种独立的编程思想,而是附属于面向对象思想体系,属于其一部分.或者说,它是面向对象编程体系中的思想精髓之一. 2.接口的本质 接口,在表面上是由几个没有主体代码的方法定义组成的集合体,有唯一的名称,可以被类或其他接口所实现(或者也可以说继承).它在形式上可能是如下的样子: interface InterfaceName { void Method1(); void Method2

  • C#中抽象方法与虚拟方法的区别

    学过C#的人应该都知道抽象方法与虚拟方法,而很多初学者对二者之间的区别并不是很了解.今天本文就来分析一下二者之间的区别.并附上实例加以说明.具体分析如下: 一.主要区别: 对于抽象方法,子类必须实现它. 对于虚拟方法,子类可以重写也可以不重写. 因此,两者约束不同 二.实例代码如下: /* 声明一个抽象类 * 1.抽象类中可以包含变量 * 2.抽象方法中无法声明方法体 */ abstract class AbsClass { string name; public abstract void D

  • 详解C#用new和override来实现抽象类的重写区别

    一,抽象的实现 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Virtualdemo { class Program { static void Main(string[] args) {//BClass A = new BClass(); 抽象类无法被实例 Class1 c = new Class1(); BClass c2 = c; c2.Meth

  • c#中抽象类和接口的详细介绍

    一.抽象类:抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外,抽象类可以派生自一个抽象类,可以覆盖基类的抽象方法也可以不覆盖,如果不覆盖,则其派生类必须覆盖它们. 二.接口:接口是引用类型的,类似于类,和抽象类的相似之处有三点: 1.不能实例化: 2.包含未实现的方法声明: 3.派生类必须实现未实现的方法,抽象类是抽象方法,接口则是所有成员(不仅是方法包括其他

  • C#中实现抽象类里建立静态方法

    本文简述了C#中实现抽象类里建立静态方法的解决办法,示例程序如下: public class TestMain { public static void main(String[] args) { AbstractTest.out(); } } 如上面所示的程序是可以运行的. 一般情况下抽象类中可以包含抽象方法和非抽象方法,静态类中只能包含静态成员,所有的静态成员也只能包含在静态类中. 因为静态static的本质是包含abstract和sealed的,所以静态方法可以包含在抽象类中,并通过抽象类

  • C#抽象类与抽象方法详解

    本文实例为大家分享了C#抽象类与抽象方法的具体实现代码,供大家参考,具体内容如下 1.代码 class Program { static void Main(string[] args) { for (int i = 1; i < 10; i++) { if (i % 3 == 1) { StorageDevice storge1 = new Upan("sandisk--" + i.ToString()); storge1.Inputdevice(); storge1.Writ

随机推荐