【问题标题】:ReadOnly in C# vs in VB.NETC# 与 VB.NET 中的只读
【发布时间】:2012-03-09 10:56:58
【问题描述】:

看来VB.NET和C#的readonly关键字有些区别……

比如说,C# 中的 ReadOnly 属性可以在某些条件下分配,但在 VB.NET 中 - 永远不会?

【问题讨论】:

  • 您没有在 C# 属性上应用 readonly 关键字 - 您只是没有给该属性一个 setter。如果您可以在此处包含一些示例代码来说明您认为存在差异的地方,那将是真的有用的。
  • @JonSkeet,我同意,这个问题试图将“青蛙”与“蜂蜜”进行比较
  • 这个问题基本上不清楚它试图比较的什么。请阅读tinyurl.com/so-hints
  • 乔恩,我在 VB.NET 中设置了一个 ReadOnly 属性,并尝试在构造函数中设置它的值,这不起作用,这就是为什么这个问题。现在,当我明白我不能删除它时)
  • 如果您因代码未按预期工作而提出问题,您为什么不提供该代码? (你读过我链接的博文吗?)

标签: c# .net vb.net c#-to-vb.net


【解决方案1】:

在 C# 中,readonly字段 修饰符。它指定该字段只能在初始化时或在构造函数中分配。

VB.NET 是一样的,只是 ReadOnly 也是 property 修饰符。它指定该属性不能分配给 - 即,它是一个 getter。

【讨论】:

  • @serhio - 我的疏忽 - 现在已修复 :)
  • “当它被声明时”,实际上是作为构造函数的一部分结束的,所以规则仍然只在构造函数中。
  • @Lasse V. Karlsen♦ 对于WRITES代码的开发者来说,它不是一回事,即使对于编译器来说它可能是一样的。
  • 问题也有 .net 标签,对于 .net,初始化发生在构造函数中。
【解决方案2】:

在 VB.NET 中,只读属性通常从外部类创建为只读的。 如果你想设置这个属性,你可以很容易地在类内部通过改变真实的局部变量来完成。

所以,例如在 VB 2010 中

Public ReadOnly Property SomeVariable() As String

或在早期版本中,

Private _SomeVariable As String
Public ReadOnly Property SomeVariable() As String
    Get
        Return _SomeVariable
    End Get
End Property

你可以在你的班级里将它设置为:

_SomeVariable = somevalue

无法从外部类修改属性值。

【讨论】:

    猜你喜欢
    • 2010-11-27
    • 1970-01-01
    • 2012-11-01
    • 1970-01-01
    • 2010-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多