C#抽象类(abstract)

在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

抽象类特征

1、抽象类不能实例化。

2、抽象类可以包含抽象方法和抽象访问器。

3、不能用 sealed 修饰符修改抽象类,这意味着该类不能被继承。

4、从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。

在方法或属性声明中使用 abstract 修饰符以指示此方法或属性不包含实现。

抽象类关键字(abstract)

abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。

在类声明中使用 abstract 修饰符以指示类只能是其他类的基类。

抽象方法特点

1、抽象方法是隐式的 virtual 方法。

2、只允许在抽象类中使用抽象方法声明。

3、因为抽象方法声明不提供实实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。例如:

public abstract void MyMethod();

4、实现由 overriding 方法提供,它是非抽象类的成员。

5、在抽象方法声明中使用 static 或 virtual 修饰符是错误的。

除了在声明和调用语法上不同外,抽象属性的行为与抽象方法一样。

1、在静态属性上使用 abstract 修饰符是错误的。

2、在派生类中,通过包括使用 override 修饰符的属性声明可以重写抽象的继承属性。

abstract 修饰符用于表示所修饰的类是不完整的,并且它只能用作基类。

    public abstract class Father
    {
        public abstract void f();
        
    }
    class ZClass : Father
    {
        public override void f()
        {
            Console.WriteLine("重写父类抽象类");
        }
    }

抽象类与普通类的区别:

1、抽象类不能直接实例化,并且对抽象类使用 new 运算符是编译时错误。

2、虽然一些变量和值在编译时的类型可以是抽象的,但是这样的变量和值必须或者为 null,或者含有对非抽象类的实例的引用(此非抽象类是从抽象类派生的)。

3、允许(但不要求)抽象类包含抽象成员。

4、抽象类不能被密封。

虚拟方法

使用virtul定义该方法为虚拟方法。

虚拟方法重定义

使用override关键字,将一个虚拟的方法重定义。

这里注意。方法的隐式隐藏,使用new显示隐藏。

隐藏只是子类里面的将父类隐藏,但是,不影响父类的方法。

    class FClass
    {
        public virtual void f()
        {
            Console.WriteLine("父类虚拟方法1");
        }
        public virtual void d()
        {
            Console.WriteLine("父类虚拟方法2");
        }
    }
    class Zl:FClass
    {
        public override void f()
        {
            Console.WriteLine("重写父类虚拟类1");
        }
    }
  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中,抽象类是一种不能被实例化的类,通常用于作为其他类的基类。抽象类可以包含抽象方法、虚方法、静态方法、字段、属性、构造函数等成员。 以下是如何使用抽象类的示例步骤: 1. 定义抽象类 首先,您需要定义一个抽象类抽象类使用 `abstract` 关键字进行定义。例如: ```csharp public abstract class MyAbstractClass { public abstract void MyAbstractMethod(); public virtual void MyVirtualMethod() { Console.WriteLine("MyVirtualMethod called."); } } ``` 在这个例子中,`MyAbstractClass` 类是一个抽象类,并且包含一个抽象方法 `MyAbstractMethod()` 和一个虚方法 `MyVirtualMethod()`。 2. 继承抽象类 接下来,您需要创建一个类,该类从抽象类继承。这意味着该类需要提供抽象类中定义的所有抽象方法的实现。例如: ```csharp public class MyClass : MyAbstractClass { public override void MyAbstractMethod() { Console.WriteLine("MyAbstractMethod called."); } public override void MyVirtualMethod() { Console.WriteLine("MyVirtualMethod overridden."); } } ``` 在这个例子中,`MyClass` 类从 `MyAbstractClass` 抽象类继承,并且提供了 `MyAbstractMethod()` 和 `MyVirtualMethod()` 方法的实现。 3. 创建对象 接下来,您需要创建一个类的对象,该类从抽象类继承。例如: ```csharp MyClass myObj = new MyClass(); ``` 4. 调用方法 最后,您可以使用对象调用 `MyAbstractMethod()` 和 `MyVirtualMethod()` 方法。例如: ```csharp myObj.MyAbstractMethod(); myObj.MyVirtualMethod(); ``` 这将调用 `MyClass` 类中实现的 `MyAbstractMethod()` 和 `MyVirtualMethod()` 方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值