抽象类设计:为什么不定义公共构造函数?

2024-01-29

看这里(抽象类设计):http://msdn.microsoft.com/en-us/library/ms229047.aspx http://msdn.microsoft.com/en-us/library/ms229047.aspx

It says:

(1) 不要在抽象类型中定义公共或受保护的内部(Visual Basic 中的受保护的友元)构造函数。

在 C# 中,我们无法实例化抽象类。那么,在 C# 中为抽象类定义公共构造函数还重要吗?或者因为语义的原因而不为抽象类编写公共构造函数?

它还说:

(2) 在抽象类中定义受保护的或内部构造函数。

定义内部构造函数?在(1)中,它告诉我们不定义内部受保护的构造函数是因为“具有公共或受保护内部可见性的构造函数适用于可以实例化的类型”。为抽象类定义内部构造函数不会违反 (1) 中的规则吗?

提前致谢。 :)


让我们看一下每个案例。

受到推崇的:

  • 受保护的- 最明显的情况 - 所有子类都可以调用构造函数,无论它们驻留在哪个程序集中(只要抽象基类itself对他们来说是可见的)。

  • internal- 当您希望抽象类型公开时很有用visible,但不公开可继承的。在这种情况下,您需要使所有非私有构造函数internal。仅限于子类same程序集作为抽象基类将能够调用构造函数 - 实际上,只有它们才能继承。另一个用例是,如果您想要一个仅对同一程序集子类可见的“特殊”构造函数。

  • private- 主要用于“脏工作”构造函数,当抽象类使用构造函数链接时,这些构造函数是抽象类的其他构造函数的目标。唯一的其他用途,当all构造函数是私有的,只允许子类化nested类,它们确实可以访问包含类型的私有成员。


不建议:

  • public- 没用,行为正常同样地 to protected。无论如何,只有子类可以调用构造函数,因为基类是抽象的。

  • 受保护的内部- 这也与protected. The protected internal可访问性级别表示受保护或内部,而不是受保护和内部。但是,那internal这里的修饰符没有任何作用 - 它没有prevent驻留在程序集外部的子类无法调用构造函数(假设抽象基类是公共的),因为它们可以依赖protected访问,也不允许相同的程序集类型not子类调用它(类型是抽象的)。

这里的关键点是每个非private抽象类中的构造函数已经at best protected。香草internal-modifier 加强了对谁可以调用构造函数的限制。public and protected internal没有完成任何事情,因为他们appear削弱限制,但并没有真正成功。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

抽象类设计:为什么不定义公共构造函数? 的相关文章

  • C语言实现延时函数

    我想使用空循环实现延迟函数 但是完成一次循环所需的时间取决于编译器和机器 我希望我的程序自行确定时间并将程序延迟指定的时间 谁能给我任何想法如何做到这一点 注意 有一个名为delay 的函数可以将系统暂停指定的毫秒 是否可以在不使用此功能的
  • 如何用另一个静态变量初始化一个静态变量?

    静态1 hpp include
  • Monitor.Pulse & Wait - 意外行为

    http www codeproject com Articles 28785 Thread synchronization Wait and Pulse demystified http www codeproject com Artic
  • 提取单花括号内的值

    我想要一个收藏 value 一个字符串使用正则表达式 例如 lorem ipsum field1 lorem ipsum field2 lorem ipsum field1 lorem ipsum field2 field3 我会得到 fi
  • .NET 中的 Class.forName() 等效项?

    动态获取对象类型然后创建它的新实例的 C 方法是什么 例如 如何在 C 中实现以下 Java 代码的结果 MyClass x MyClass Class forName classes MyChildClass newInstance Lo
  • 更改实体的可访问性

    我想建立一个内部实体 我已将实体 其标量属性和导航属性更改为内部 当我尝试构建它时出现此错误 错误 6036 EntityType 文件 具有 内部 可访问性 EntitySet 文件 具有具有 公共 可访问性的 get 属性 Entity
  • 使用 LINQ 展平嵌套字典

    所以我有一本形式的字典Dictionary
  • UI 线程正在阻塞调用 COM 对象的后台线程

    我正在开发一个通过第三方 COM 库与外部设备通信的应用程序 我试图让与设备的所有通信都通过后台线程 以防止通信问题搞砸我的应用程序 并消除在 UI 线程中进行通信所引入的一些其他复杂性 问题是 每当发生导致主 UI 线程阻塞的情况 即调用
  • 有没有办法找到dll公开的所有函数

    我一直在寻找一种方法来获取映射到 dll 中函数名称的所有字符串 我的意思是您可以调用 GetProcAddress 的所有字符串 如果你对 dll 进行十六进制转储 符号 字符串 就在那里 但我认为必须有一个系统调用来获取这些名称 如果您
  • 如何在Unity Inspector中创建多维数组?

    如何在 Unity Inspector 中创建枚举多维数组并使其可序列化 以便我可以从不同的脚本调用它 public enum colors red blue green yellow cyan white purple public in
  • 将 std::pair const 转换为 std::pair const 安全吗?

    理论上或实践上 安全吗reinterpret cast a std pair
  • 在 Linq 查询中使用动态列名称

    foreach Dimension dimensions in Enum GetValues typeof Dimension var r new ReferenceTable dimensions referenceItems List
  • 使用 FromBase64Transform 解码 base64 文件流

    The example https msdn microsoft com en us library system security cryptography frombase64transform 28v vs 110 29 aspx从M
  • ef core 在更新数据库期间不使用 ASPNETCORE_ENVIRONMENT

    我使用 Visual Studio 通过一定的迁移来更新我的所有环境 使用下面的命令效果很好 update database Migration initMigrationProduct c ProductContext Environme
  • 我的代码哪里有泄漏?

    下面是我的代码 它打开一个 XML 文件 old xml 过滤无效字符并写入另一个 XML 文件 abc xml 最后 我将再次加载 XML abc xml 当执行以下行时 出现异常 表示 xml 文件被另一个进程使用 xDoc Load
  • NSubstitute - 测试特定的 linq 表达式

    我在当前正在开发的 MVC 3 应用程序中使用存储库模式 我的存储库界面如下所示 public interface IRepository
  • 为什么我无法通过 lambda 捕获“this”指针?

    考虑以下代码 class A public void foo auto functor this A a this auto functor a The compiler won t accept this instead of a a g
  • 调用泛型类的方法

    这是上下文 我尝试编写一个映射器来动态地将域模型对象转换为 ViewModel 对象 我遇到的问题是 当我尝试通过反射调用泛型类的方法时 出现此错误 System InvalidOperationException 无法对 Contains
  • 从其对象获取结构体字段的名称和类型

    例如 我有一个类似这样的结构 struct Test int i float f char ch 10 我有一个该结构的对象 例如 Test obj 现在 我想以编程方式获取字段名称和类型obj 是否可以 顺便说一句 这是 C 你正在要求C
  • 从 C/C++ 程序进行 Ping

    我想编写一个 C 或 C 程序 给定一个 IP 地址 对其进行 Ping 然后根据 Ping 是否成功执行进一步的操作 这个怎么做 尽情享受Ping 页面 http www ping127001 com pingpage htm 其中有一个

随机推荐

  • 绘制距原点 X 公里的路线

    跑步 步行距离显示 用户输入位置和距离 我可以以用户输入的距离为半径覆盖一个圆 以用户的位置为中心点 我可以在用户设置的距离处围绕原点设置四个基点 N S E W 并绘制到这些点的路线 这样 B 点距 A 点 100 公里 但映射的路线是
  • 如何优化以下代码

    颜色和尺寸是使用 django 中的 GET 方法从 URL 获取的 颜色和大小是复选框输入 并作为 view py 文件中的列表接收 https i stack imgur com abQ9Z png 我正在使用颜色和尺寸属性过滤我的产品
  • 在 R 中取消列出列,同时将字符(0)保留为空字符串

    我对 R 比较陌生 我有一个数据框 其中有一列存储为列表 我的专栏包含c Benzo Ferri or character 0 如果它是空的 我怎样才能将它们更改为简单的Benzo Ferri并用空字符串代替字符 0 例如 我无法df ge
  • Hyper-V W10(主机)Ubuntu 18.04(访客):为什么增强会话模式不起作用?

    我已使用 Hyper V 在 Windows 10 主机系统上安装了 Ubuntu 18 04 作为来宾系统 并且我想在全屏模式下使用来宾系统 据我所知 要调整屏幕大小 我需要在增强会话模式下运行来宾系统 如果我连接到访客系统 它既不允许我
  • python 错误 AttributeError: 'str' 对象没有属性 'setdefault'

    我正在尝试使用此命令运行 django 项目 python manage py runserver 8080 但每次我尝试运行时都会遇到这样的错误 Traceback most recent call last File manage py
  • 如何孵化PolyCollection实例?

    是否可以孵化 PolyCollection 实例 我想要从 fill Betweenx 返回一个 PolyCollection import matplotlib mlab as mlab from matplotlib pyplot im
  • Java,解析我知道为空的 JSON 对象

    我有一个 JSON 对象数组 为了解析这些数组并存储简单的数据类型值 我必须假设键名称并相应地存储它们 我还知道有时键的值将为空 例子 promotion null 我将如何解析这个 如果我尝试访问值为 null 的键 则会收到 JSONE
  • 异常 java.lang.ClassNotFoundException: org.apache.commons.dbcp.BasicDataSource

    我正在尝试将 spring 和 Hibernate 与 mysql 集成 我创建了一个简单的 java 项目和一个包含 3 个类的包 一个应用程序 context xml 文件和一个用于映射的 hbm xml 但执行后 我得到这个错误 Er
  • Ruby 递归函数

    我在从递归函数返回值时遇到问题 def ask question question print question answer STDIN gets chomp ask question question if answer empty r
  • 来自 Google Play 的 SSL 警告

    收到来自 google play 的警告 我如何处理 WebViewClient onReceivedSslError 处理程序的不安全实现的 SSL 错误处理程序漏洞 请尽快解决此漏洞并增加升级后的APK的版本号 为了正确处理SSL证书验
  • Redux / RTK:为一个切片创建增强器?

    在我的 Redux RTK 存储中的一个切片中 要使该切片完成其工作 我所需要做的就是使用以下命令创建一个实体适配器createEntityAdapter https redux toolkit js org api createEntit
  • 类变量、范围解析运算符和不同版本的 PHP

    我在 codepad org 中尝试了以下代码 class test const TEST testing 123 function test testing TEST echo self testing class new test 它返
  • 如何编写自定义 POCO 串行器/解串器?

    我想为 FIX 消息编写一个自定义 NET 序列化器 反序列化器 与 XML 不同 基本上该消息的编码为
  • 使用用户名和密码登录后如何抓取网站

    我编写了一个网络爬虫 可以使用关键字抓取网站 但我想登录到我指定的网站并按关键字过滤信息 如何实现这一点 我发布了到目前为止我已经完成的代码 public class DB public Connection conn null publi
  • 如何在 React.JS 中添加 ClassName 并删除 onScroll 事件?

    我正在尝试制作一个粘性标题 可以根据他在页面上的位置更改其背景颜色 为此 我尝试将 className active 添加到我的样式组件 StyledHeader 中 当滚动位置 Y 高于 400 像素时 它将出现 低于 400 像素时消失
  • Selenium/Chrome/ChromeDriver 问题阻止 VPS 上的爬网(DevToolsActivePort 文件不存在)

    我购买了第一个 VPS 它运行 CentOS 7 64 位 在我今天开始使用这个 VPS 之前 我对 CentOS 7 的经验绝对为零 所以请对我宽容一点 当尝试使用 Scrapy 和 Selenium 抓取一些动态生成的内容时 脚本最终失
  • 重新发送 DocuSign 电子邮件

    是否有 API 端点允许我重新向收件人发送电子邮件 有时 用户可能无法收到或丢失包含签名链接的 DocuSign 电子邮件 我希望能够根据需要再次发送这些电子邮件 您可以使用 修改收件人 请求来触发向特定收件人重新发送电子邮件通知 PUT
  • Android 应用程序仅在 Eclipse 调试时因 SIGABRT Signal 6 崩溃

    我有一个应用程序可以在没有附加调试器的设备上完美运行 但是 我在Eclipse中调试时遇到了问题 当主线程挂起大约 10 秒或更长时间 例如遇到断点后 主线程会抛出 SIGABRT 显然来自 libc 我能想到的唯一解释是 主线程上的消息队
  • LINQ except 如何工作? [复制]

    这个问题在这里已经有答案了 可能的重复 LINQ 查找两个列表中的差异 https stackoverflow com questions 2404301 linq find differences in two lists 我想找到两个系
  • 抽象类设计:为什么不定义公共构造函数?

    看这里 抽象类设计 http msdn microsoft com en us library ms229047 aspx http msdn microsoft com en us library ms229047 aspx It say