Visual Basic默认属性与C#属性

本文关键字:属性 默认 Basic Visual | 更新日期: 2023-09-27 17:59:08

我正在项目中将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;
        }
    }     
}

我说得对吗?

Visual Basic默认属性与C#属性

你是对的。

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

虽然C#确实支持默认的属性语法,但索引器将很好地满足这一需求。

从2022年起,您绝对可以在C#中按名称索引类。只需将其添加到您的类定义中即可:

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

您可以添加一个setter,这样您就不再拘泥于点符号