C#学习基础概念二十五问 11-15

时间:2022-04-18 04:19:00 

11.可以使用抽象函数重写基类中的虚函数吗?

答:

可以

需使用 new 修饰符显式声明,表示隐藏了基类中该函数的实现

或增加 override 修饰符,表示抽象重写了基类中该函数的实现

示例:

    class BaseClass
    {
        public virtual void F()
        {
            Console.WriteLine("BaseClass.F");
        }
    }
    abstract class  DeriveClass1 : BaseClass
    {
        public abstract new void F();
    }

    //感谢watson hua(http://huazhihao.cnblogs.com/)的指点
    //是他提醒了我还可以用这种方法抽象重写基类的虚方法
    abstract class DeriveClass2 : BaseClass
    {
        public abstract override void F();
    }

12.密封类可以有虚函数吗?

答:

可以,基类中的虚函数将隐式的转化为非虚函数,但密封类本身不能再增加新的虚函数

示例:

    class BaseClass
    {
        public virtual void F()
        {
            Console.WriteLine("BaseClass.F");
        }
    }
    sealed class DeriveClass : BaseClass
    {
        //基类中的虚函数F被隐式的转化为非虚函数

        //密封类中不能再声明新的虚函数G
        //public virtual void G()
        //{
        //    Console.WriteLine("DeriveClass.G");
        //}
    }

13.什么是属性访问器?

答:

属性访问器(Property Accessor),包括 get 访问器和 set 访问器分别用于字段的读写操作

其设计目的主要是为了实现面向对象(OO)中的封装思想。根据该思想,字段最好设为private,一个精巧的类最好不要直接把字段设为公有提供给客户调用端直接访问

另外要注意属性本身并不一定和字段相联系

14.abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?

答:

abstract 修饰符不可以和 static、virtual 修饰符一起使用

abstract 修饰符可以和 override 一起使用,参见第11点

示例:

using System;
using System.Collections.Generic;
using System.Text;

namespace Example14
{
    class BaseClass
    {
        public virtual void F()
        {
            Console.WriteLine("BaseClass.F");
        }
    }
    abstract class DeriveClass1 : BaseClass
    {
        //在这里, abstract是可以和override一起使用的
        public abstract override void F();
    }
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}

15.接口可以包含哪些成员?

答:

接口可以包含属性、方法、索引指示器和事件,但不能包含常量、域、操作符、构造函数和析构函数,而且也不能包含任何静态成员

标签:C#学习基础概念二十五问,11-15
0
投稿

猜你喜欢

  • java8 Stream大数据量List分批处理切割方式

    2023-02-10 22:34:36
  • Java properties 和 yml 的区别解析

    2023-04-01 22:28:09
  • Android 和 windows C/C++/QT通讯时字节存储

    2022-07-16 06:09:02
  • SpringBoot集成redis实现分布式锁的示例代码

    2022-08-24 19:21:56
  • c#中返回文章发表的时间差的示例

    2021-08-18 16:51:26
  • Java NIO框架Netty简单使用的示例

    2022-09-08 02:51:27
  • Java流程控制之循环结构for,增强for循环

    2023-11-03 10:45:20
  • java中用String.Join美化代码的实例讲解

    2022-03-04 08:17:04
  • java Apache poi 对word doc文件进行读写操作

    2023-09-23 02:13:15
  • C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码

    2021-11-06 14:10:07
  • 详解Guava中EventBus的使用

    2021-09-13 07:36:34
  • 关于bootstrap.yml和bootstrap.properties的优先级问题

    2021-10-04 11:50:30
  • C# 中的动态创建组件(属性及事件)的实现思路及方法

    2021-07-20 04:58:31
  • Java 详解Collection集合之ArrayList和HashSet

    2021-09-10 06:27:02
  • 深入剖析Java编程中的序列化

    2021-06-15 17:10:07
  • Spring boot + mybatis + orcale实现步骤实例代码讲解

    2023-07-11 22:50:09
  • Java中对象的深复制(深克隆)和浅复制(浅克隆)介绍

    2023-02-20 12:05:39
  • 解决IDEA中maven导入jar包一直报错问题

    2021-12-26 11:52:22
  • Java如何在 Word 中设置上、下标

    2023-10-15 21:04:10
  • IDEA中的maven没有dependencies解决方案

    2021-08-01 11:58:50
  • asp之家 软件编程 m.aspxhome.com