Visual Basic 默认属性与 C# 属性

4

我正在将项目中的Visual Basic.Net代码转换为C#。但是我对如何将Visual Basic默认属性转换为C#有一些疑问。我首先想到的选项是使用索引器。让我们想象一下在Visual Basic中的以下代码:

Public Class MyClass
Dim MyHash as Hashtable

Public sub New()
    MyHash = New Hashtable()
    MyHash.Add("e1",1)
    MyHash.Add("e2",2)
    MyHash.Add("e3",3)
End Sub

Defaul Propery MyDefProp(ByVal key as string) as Object
  Get
    Return MyHash(key)
  End Get

  Set(ByVal ObjectToStore As Object)
    MyHash(key) = ObjectToStore
  End Set
End Property

将此代码转换为C#:

public class MyClass
{
    private Hashtable MyHash;

    public MyClass()
    {
        MyHash = new Hashtable();
        MyHash.Add("A1",1);
        MyHash.Add("A2",2);
        MyHash.Add("A3",3);
    }

    public object this[string key]
    {
        get
        {
            return MyHash[key]; 
        }

        set
        {
            MyHash[key] = value;
        }
    }     
}

我对此正确吗?
3个回答

5

你说得对。

唯一的区别是VB.Net版本还创建了一个命名索引属性;C#不支持命名索引属性。


1

虽然C#支持默认属性语法,但是你的索引器会很好地满足这个需求。


索引器是默认属性。 - SLaks
我的 VB 程序有些生疏,但我认为你不必强制使用索引默认属性。例如,Text 属性是 TextBox 的默认属性,它不是一个索引属性。 - agent-j
VB.NET 支持“索引”属性,这些属性不是默认属性。与 C# 不同,属性可以有任意数量的参数。 - Hans Passant

0

截至2022年,您绝对可以在C#中通过名称索引类。只需将以下内容添加到您的类定义中:

public object this[string key]
{
   get { return this.GetType().GetProperty(key).GetValue(this, new object[0]); }
}

你可以添加一个setter,这样你就不再局限于点符号表示法了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接