重写子类中的 ReadOnly 属性以使其读/写(VB.NET 或 C#)

2024-02-13

这在带有属性的 VB.NET 中似乎不可能,因为属性语句本身必须描述它是否是ReadOnly or not.

在我下面的例子中,它不允许我做ReadWriteChild编译。我想我可以让父级读/写,然后让 ReadOnlyChild 的设置器不执行任何操作,但这似乎有点hacky。在这种情况下,最好的选择似乎是放弃属性,转而使用 getter/setter 方法。

Public MustInherit Class Parent

    Public MustOverride ReadOnly Property Foo() As String

End Class

Public Class ReadOnlyChild
    Inherits Parent

    Public Overrides ReadOnly Property Foo() As String
        Get
            ' Get the Property
        End Get
    End Property

End Class

Public Class ReadWriteChild
    Inherits Parent

    Public Overrides Property Foo() As String
        Get
            ' Get the property.
        End Get
        Set(ByVal value As String)
           ' Set the property.
        End Set
    End Property

End Class

鉴于您想要完成的任务以及您发布的示例代码,VB.NET 不会让您这样做。

通常,您可以在 VB.NET 中声明属性,如下所示:

Public Class qwqwqw
  Public Property xyz() As String
      Get
          Return ""
      End Get
      Private Set(ByVal value As String)
          '
      End Set
  End Property
End Class

基本上将整个属性标记为公共,但为 setter(或 getter)提供更严格的范围。

您的情况的主要问题是 MustInherit (即抽象)基类。由于您在其中定义的属性被标记为 MustOverride,因此您无法提供默认实现(即它也是抽象的),并且这包括“Get”和“Set”轮廓,因此,无论“总体” “你给这个抽象属性声明的范围,VB.NET将强制你使用这个范围both派生类中的 getter 和 setter。

在基类的属性上使用 ReadOnly 限定符将强制所有派生类和该属性的实现也为 ReadOnly。忽略 ReadOnly 限定符仍然不起作用,因为无论您为抽象属性赋予什么范围,都将是您必须应用于派生实现中的 setter 和 getter 的范围。

例如:

Public MustInherit Class Parent
  Public MustOverride Property Foo() As String
End Class

Public Class ReadOnlyChild
  Inherits Parent

  Public Overrides Property Foo() As String
    Get
        '
    End Get
    Private Set(ByVal value As String)
        '
    End Set
  End Property
End Class

(注意设置器上的私有范围)。这不会起作用,因为 VB.NET 坚持认为,由于您要重写基类属性,因此整个属性必须与您要重写的属性具有相同的范围(在本例中为公共)。

尝试使基类的抽象属性受保护也不起作用,因为您将需要在与基类中声明的相同范围级别(即受保护)实现该属性。通常,当不使用特定范围级别覆盖基类的抽象定义时,您可以为 getter 或 setter 提供一个more限制性范围级别,但你不能给它一个less限制性范围级别。

所以:

Public MustInherit Class Parent
  Protected MustOverride Property Foo() As String       
End Class

Public Class ReadOnlyChild
  Inherits Parent

  Protected Overrides Property Foo() As String
      Public Get
          '
      End Get
      Set(ByVal value As String)
          '
      End Set
  End Property
End Class

(注意 getter 的公共作用域)。也不起作用,因为 public 作用域比 protected 的整体属性范围限制更少,而且与基类的抽象属性声明中定义的作用域级别不同。

如果您的类的设计正如您在问题中提到的那样,我个人会使用“java风格”的getter和settermethods因为它们可以用自己的范围级别单独声明。

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

重写子类中的 ReadOnly 属性以使其读/写(VB.NET 或 C#) 的相关文章

  • 在调用堆栈中看到大量 clr!CLR Semaphore::Wait

    我们看到很多像下面这样的调用堆栈 我可以知道什么条件 情况会发生这种情况吗 OS Thread Id 0x48654 559 Current frame ntdll NtWaitForSingleObject 0xa Child SP Re
  • 每次调用新方法时触发事件

    我正在做一个logger for a c 应用程序需要记录每个方法被调用的时间以及每个方法执行时间 我可以通过调用自己的方法来做到这一点EventLogger LogMethodCall方法在每个方法的开头 但我想知道是否有办法使CLR每次
  • 如何启动异步任务对象

    我想开始收集Task同时处理对象并等待所有对象完成 下面的代码显示了我想要的行为 public class Program class TaskTest private Task createPauseTask int ms works w
  • 使用预编译头减少 clang 编译时间

    我正在开发一个数据库项目 该项目将查询 以某种高级语言表示 编译为 C 代码 这段代码由数据库编译并执行 那部分工作得很好 现在 我正在尝试减少 C 查询代码的编译时间 我想知道是否可以使用预编译头来提高性能 该查询被转换为一个名为 Que
  • Confuser .NET 混淆器。安全吗? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我目前正在开发一个应用程序 其中阻止用户反编译代码非常重要 现在 我意识到 如果由经验丰富的程序员执行 大多数 exe 都是可反编译的
  • 在 C# 中调用事件处理程序

    我一直在尝试学习如何在 C 中使用事件处理程序 但我无法弄清楚 handler this e 在以下代码中的作用 public event EventHandler ThresholdReached protected virtual vo
  • 有没有办法将 boost::json::serializer 切换为美化输出?

    Using boost json serializer如中的示例所示文档 快速查看 http vinniefalco github io doc json json usage quick look html以紧凑格式保存 json tre
  • 如何使用boost库读取和写入.ini文件[重复]

    这个问题在这里已经有答案了 如何使用boost库读取和写入 或修改 ini文件 With Boost PropertyTree您可以读取并更新树 然后写入文件 请参阅load and save功能 看一下如何访问属性树中的数据 http w
  • 在 C++ 中使用表达式模板进行符号微分

    如何在 C 中使用表达式模板实现符号微分 一般来说 您需要一种表示符号的方法 即编码的表达式模板 例如3 x x 42 以及一个可以计算导数的元函数 希望您对 C 中的元编程足够熟悉 知道这意味着什么和需要什么 但可以给您一个想法 This
  • 函数参数评估顺序[重复]

    这个问题在这里已经有答案了 在 C 和 C 中 函数参数的求值是否有固定的顺序 我的意思是 标准怎么说 是吗left to right or right to left 我从书中得到的信息令人困惑 是否有必要function call应该使
  • 如何强制用户仅使用“new”创建从我派生的类的对象?

    为了实现引用计数 我们使用IUnknown http msdn microsoft com en us library ms680509 VS 85 aspx类接口和智能指针模板类 该接口具有所有引用计数方法的实现 包括Release vo
  • ASP.NET MVC 路由 - 向路由添加 .html 扩展名

    我对 MVC 和路由非常陌生 我被要求修改一个应用程序以使用不同的 url 由于我没有经验 这项任务对我来说有点困难 好吧 让我们谈谈一些代码 routes MapRoute CategoryBySeName Route name prod
  • C++ 错误:从“char”到“const char*”的转换无效

    我对 C 完全陌生 我创建了这个函数 bool guessWord string compWord cout lt lt Guess a letter string userLetter cin gt gt userLetter for u
  • 使用 QGraphicsScene 实现流畅的动画

    我希望我的问题并不总是同样的问题 我有一个 QGraphicsScene 它的项目是一些 QGraphicsPixmap 我用一个计时器来移动它们 每秒 SetX 10 我设置 10是因为窗口大100 使用这个解决方案我的动画不流畅 我想我
  • 数组与映射的性能

    我必须循环一个大数组中的元素子集 其中每个元素都指向另一个元素 问题来自于检测大图中的连接组件 我的算法如下 1 考虑第一个元素 2 将下一个元素视为前一个元素所指向的元素 3 循环直到没有发现新元素 4 考虑1 3中尚未考虑的下一个元素
  • 非静态类中的静态方法和静态类中的静态方法有什么区别?

    我有两个班级A级和B级 static class ClassA static string SomeMethod return I am a Static Method class ClassB static string SomeMeth
  • 从 exit() 和 fork() 返回的结果奇怪地发生了位移

    我有一个 C 代码 有时会自行分叉 每个分叉都会执行一些操作 然后返回一个错误代码 目前 每个子进程返回其 ID 0 n void other int numero exit numero int main for int i 0 i lt
  • 字符串 c 的二叉树

    我正在尝试实现一个能够在 c 中保存字符串的二叉树 在让代码适用于整数之后 我尝试稍微修改它以处理字符数组 现在我似乎完全破解了代码 但不知道如何破解 任何帮助表示赞赏 include
  • 在 C# WinForms 中预览文档(Word、Excel、PDF、文本文件等)?

    我正在开发一个 C WinForms 应用程序 我希望能够 预览 其中的各种文档类型 也就是说 当用户从列表中选择文件名时 它会在下面以相同的形式显示所选文件的预览 这很像 Outlook 允许您无需双击即可预览选定邮件的方式 有没有什么方
  • 如何在 Winform DataGridView 中创建不同的单元格格式

    我有一个 DataGridView 我将其绑定到 DataTable DataTable 是一个全数字值 要求 DataGridView 中的每 n 行都包含文本 而不是数值 以便在视觉上为用户分隔部分 我很高兴在绑定后将此文本数据放入 D

随机推荐

  • 在 Swift 中以编程方式返回到之前的 ViewController

    我通过单击按钮将用户发送到页面 该页面是一个UITableViewController 现在 如果用户点击某个单元格 我想将他推回到上一页 我想到了类似的事情self performSegue back 但这似乎是一个坏主意 正确的做法是什
  • CreateProcessAsUser 不绘制 GUI

    我有一个在 SYSTEM 帐户下运行的 Windows 服务 用于检查每个登录用户是否正在运行特定的应用程序 如果应用程序未运行 服务将启动它 在相应的用户名下 我正在尝试使用 CreateProcessAsUser 来实现我的目标 该服务
  • 在数据表中正确渲染迷你图

    在下面发布的示例中 我尝试将 jquery sparkline 库中的迷你图渲染为 jquery dataTables 表中的数据列 加载下面的示例效果很好 但仅限于第一页 如果我单击 下一步 而不是将数据呈现为迷你图 它只会呈现数字 如果
  • Apache 背后的代理 React 服务器

    我刚刚使用 create react app 创建了一个 React 应用程序 该应用程序从端口 3000 启动 很好 我想使用前缀访问应用程序 在我的例子中是 node 和端口 80 即http localhost 节点 http loc
  • PHP 函数错误和成功模式

    当函数正常执行时 从 PHP 函数返回错误的最佳方法是什么 Example public function login user pw if this gt verifyUser user return error about invali
  • Google foobar 响应错误(400)

    我正在尝试解决Google的问题foob ar挑战 http www google com foobar 我不会向其他人破坏实际问题 但标题是 拯救 Beta Rabbit 我的解决方案是用 Java 编码的 每次我尝试验证它时 我都会得到
  • 在单独的表单上更改 NotifyIcon

    我有一个带有 NotifyIcon 的表单 Form1 我有另一个表单 Form2 我想更改 NotifyIcon 的图标 每当我使用此代码时 我都会在系统托盘中显示一个额外的图标 而不是更改当前图标 Form1 ico 是 NotifyI
  • 如何提示用户选择保存文件的位置?

    在我的主表单中 我有一个名为 SavePDFDocument 的方法 private void SavePDFDocument PDFWrapper pdfWrapper new PDFWrapper pdfWrapper CreatePD
  • getResponseCode 中的 HttpURLConnection 随机出现 SocketTimeoutException

    我在 con getResponseCode 中收到以下错误 java net SocketTimeoutException failed to connect to example com port 80 after 3000ms at
  • 如何在 SQLAlchemy 中实现空合并运算符?

    或者我该如何让这个东西发挥作用 我有一个 Interval 对象 class Interval Base tablename intervals id Column Integer primary key True start Column
  • Plotly.js:初始缩放

    我有 256 个数据点 当绘图首次出现时 我希望 x 轴自动缩放到沿 X 轴的特定范围 有办法吗 我必须以某种方式打到 D3 吗 就像是 Plotly plot graph some data trace xaxis range 0 1 t
  • 导入 const 数组 React

    我尝试将一个数组导入到我的父组件中 并将该数据作为道具发送给他的孩子 import Seed from const Seed export default class ProductList extends React Component
  • 在 Ansible 中动态构建变量名称

    我有一个剧本 它将迭代不同环境 dev 和 prod 中的一组主机 主机所处的环境会改变它所拥有的其他变量 例如 这是在我的 vars main yml 文件中 folder list DEV folder 1 folder 2 folde
  • 以给定概率生成随机数

    我有一个问题 基本上是以下 matlab 问题的矢量化 R 解决方案 matlab 生成给定概率的随机数 https stackoverflow com questions 13914066 generate random number w
  • 不带扩展名的文件名的正则表达式

    我正在寻找一个正则表达式 它将捕获没有扩展名的文件名 并在反向引用中给我该名称 以便我可以添加扩展名 因此 如果有人输入 xyz 我可以将其替换为 xyz html 不应捕获 xyz php 或 xyz html Thanks 使用以下正则
  • 写入大文件

    我尝试写入一个大文件 但它似乎不适用于大于 2GB 的文件 我尝试过使用 boost iostreams file sink 这只是升压流的限制吗 还有其他方法可以在 Win64 和 win32 上写入大文件吗 这取决于 您正在使用的文件系
  • Application.LoadComponent 出现线程错误(键已存在)

    MSDN 说 System Windows Application 的公共静态成员是线程安全的 但是当我尝试使用多个线程运行我的应用程序时 出现以下异常 ArgumentException An entry with the same ke
  • Scala - 辅助构造函数总是必须调用另一个构造函数有什么好处?

    来自 Java 世界 我不明白 Scala 中对辅助构造函数的限制有什么帮助 在Java中 我知道我们可以有多个构造函数 只要它们的签名不同 在 Scala 中 辅助构造函数中的第一个调用必须是另一个辅助构造函数或类的主构造函数 为什么 这
  • 如何在Lua中给定日期时间添加天数

    我是 Lua 脚本的新手 我的系统在任何时区运行 但我需要格林威治标准时区的新日期和格林威治标准时间的给定日期 local creation date 2016 05 23 07 34 19 This is in GMT date loca
  • 重写子类中的 ReadOnly 属性以使其读/写(VB.NET 或 C#)

    这在带有属性的 VB NET 中似乎不可能 因为属性语句本身必须描述它是否是ReadOnly or not 在我下面的例子中 它不允许我做ReadWriteChild编译 我想我可以让父级读 写 然后让 ReadOnlyChild 的设置器