在C#中,可以通过不定义set函数来定义readonly
getter函数:
private int _id;
public int Id
{
get { return _id; }
// no setter defined
}
在VB.NET中
Private _id as Integer
Public Readonly Property Id() As Integer
Get
Return _id
End Get
End Property
是否可以像在VB .NET中一样标记readonly
这样的函数,以便更加详细?
答案 0 :(得分:10)
我不知道ReadOnly
在VB中给你的是什么。我想你能得到的最明确的实际上不那么冗长:
public int Id { get; private set; }
在C#中,readonly
表示在创建对象期间设置了字段的值,并且在构造函数退出后不可更改。你可以通过以下方式实现这一目标:
private readonly int _id; // note field marked as 'readonly'
public int Id
{
get { return _id; }
}
不幸的是,自动属性(如我在第一个代码段中显示的)不允许为readonly
。也就是说,您必须通过确保在构造函数退出后没有任何类的代码调用私有setter来自己强制执行只读语义。我想这与VB对ReadOnly
的使用情况有所不同。
编辑正如托马斯指出的那样,没有吸气剂与拥有吸气剂不同。但是VB's usage of ReadOnly
与C#one不同,至少与属性一起使用时是
' Only code inside class employee can change the value of hireDateValue.
Private hireDateValue As Date
' Any code that can access class employee can read property dateHired.
Public ReadOnly Property dateHired() As Date
Get
Return hireDateValue
End Get
End Property
对于C#程序员,ReadOnly
关键字似乎是多余的。事实上已经暗示不存在二传手。
就字段而言,C#和VB似乎是等价的。