首页 / 知识
关于.net:什么时候应该将类成员声明为虚拟(C#)/ Overridable(VB.NET)?
2023-04-16 10:58:00

When should a class member be declared virtual (C#)/Overridable (VB.NET)?为什么我不选择抽象? 声明类成员虚拟有哪些限制? 只能将方法声明为虚拟? 抽象方法或属性(都可以是虚拟的或抽象的)只能在抽象类中声明,并且不能有一个主体,即你不能在抽象类中实现它。 虚方法或属性必须具有正文,即必须提供实现(即使正文为空)。 如果有人想要使用您的抽象类,他将不得不实现一个继承自它的类并显式实现抽象方法和属性,但可以选择不覆盖虚拟方法和属性。 例如:
如果您不想在基类中定义任何实现并希望强制在任何派生类中定义它,则可以使用abstract。如果要提供可由派生类覆盖的默认实现,请将其定义为虚拟。 是的,只有方法可以是虚拟的。 如果存在基本实现,则应将成员声明为虚拟成员,但有可能在子类中重写该功能。也可以使用Virtual而不是abstract来允许方法实现是可选的(即,基本实现是一个空方法) 将成员设置为虚拟时没有限制,但虚拟成员比非虚拟方法慢。 方法和属性都可以标记为虚拟。 这里有一个问题需要注意Windows Forms。
如果你想要一个可以继承的Control / UserControl,即使你在基类中没有逻辑,你也不希望它是抽象的,因为否则你将无法在派生类中使用Designer: 我个人将大多数方法和属性标记为虚拟。我使用代理和延迟加载很多,所以我不想担心以后更改的东西。
你的问题与风格有关,而不是技术问题。我认为这本书
首先,我将回答你的第二个问题。只有方法可以声明为虚拟。 如果你正在实现Shape类,你可能会有一个名为getArea()的方法返回你的形状区域。在这种情况下,Shape类中的getArea()方法没有默认行为,因此您可以将其实现为抽象。将方法实现为抽象将阻止您实例化Shape对象。 另一方面,如果你实现类Dog,你可能想要在这种情况下实现方法Bark(),你可能想要实现一个默认的吠声并把它放在Dog类中,而一些继承类,比如Chiwawa类可能希望覆盖此方法并实现特定的吠叫声。在这种情况下,方法bark将实现为虚拟,您将能够实例化Dogs以及Chiwawas。 摘要表示您无法提供默认实现。这反过来意味着所有子类必须提供抽象方法的实现,以便可实例化(具体)。 我不确定你的'限制'是什么意思,所以无法回答这一点。 可以将属性声明为虚拟属性,但您也可以在概念上将它们视为方法。 如果你想在你的基类中给它一个实现,你就把它变成虚拟的,如果你不这样做,你就把它变成抽象的。 是的,只有方法可以声明为虚拟。 |
最新内容
相关内容
linux命令关闭虚拟机?
linux命令关闭虚拟机?,服务,地址,系统,软件,网络,市场,责任公司,信息,公司,中国,linux虚拟机mysql怎么启动和关闭1、备注:你可以将/usr/local/mlinux命令装虚拟机?
linux命令装虚拟机?,系统,管理,环境,工具,标准,软件,化工,基础,虚拟机,命令,如何在Linux中用命令行工具管理KVM虚拟环境1、新创建的虚拟环境目linux虚拟机su命令?
linux虚拟机su命令?,密码,系统,位置,工具,软件,命令,环境,工作,生产,设计,Linux入门系列——su和sudo1、两者的区别在于:使用su - 提供root账号linux虚拟化的命令?
linux虚拟化的命令?,技术,信息,工具,系统,产品,平台,第一家,业务,实时,化工,Linux虚拟化-docker本地镜像存储于Docker相关的本地资源存放在/valinux虚拟机命令安装?
linux虚拟机命令安装?,系统,软件,工具,虚拟机,网络,状态,操作系统,命令,文件,按钮,linux用虚拟机怎么安装yum源_虚拟机配置yum源这里以centos7linux虚拟机命令安装?
linux虚拟机命令安装?,系统,软件,工具,虚拟机,网络,状态,操作系统,命令,文件,按钮,linux用虚拟机怎么安装yum源_虚拟机配置yum源这里以centos7虚拟机linux系统命令?
虚拟机linux系统命令?,系统,工具,软件,名字,时间,命令,工作,首次,环境,名称,Linux虚拟机命令如何创建新的文件和文件夹1、首先,连接相应linux主linux使用命令的方法?
linux使用命令的方法?,系统,信息,工具,标准,数据,命令,左下角,目录,文件夹,图标,linux的cd命令的使用方法1、cd ~:回到用户家目录。注:这得看你linux虚拟机ls命令?
linux虚拟机ls命令?,系统,信息,时间,命令,最新,标准,工作,名称,文件,目录,linux写脚本,需要ls只显示前10个文件,怎么实现?在linux中如果用ls查linux虚拟机扩容命令?
linux虚拟机扩容命令?,扩大,系统,在线,虚拟机,盘后,工具,硬盘,磁盘,单击,下一步,Linux虚拟机添加新硬盘的全程图解1、先关闭LINUX系统,在vmwarelinux虚拟机系统命令?
linux虚拟机系统命令?,系统,环境,密码,电脑,软件,工具,信息,位置,设备,虚拟机,在虚拟机中启动LINUX系统后,进入图形化界面的命令是什么?创建新linux命令大全虚拟机?
linux命令大全虚拟机?,地址,网络,名字,系统,信息,密码,电脑,状态,首次,名称,在linux中查看虚拟机的IP地址,使用ifconfig命令出来这么多信息,不