C#-Indexed Properties?

后端 未结 3 1169
余生分开走
余生分开走 2021-01-19 16:35

I\'ve been using Visual Basic for quite a while and have recently made the decision to begin learning C# as a step forward into learning more complex languages.

As a

相关标签:
3条回答
  • 2021-01-19 16:44

    Indexers allow instances of a class or struct to be indexed just like arrays. Indexers resemble properties except that their accessors take parameters.

    http://msdn.microsoft.com/en-us/library/6x16t2tx.aspx

    Indexers are defined using the this keyword like this:

    public T this[int i]
    {
        get
        {
            // This indexer is very simple, and just returns or sets
            // the corresponding element from the internal array.
            return arr[i];
        }
        set
        {
            arr[i] = value;
        }
    }
    

    The .NET class library design guidelines recommend having only one indexer per class.

    You can overload indexers based on the indexing parameter type

    public int this[int i]
    public string this[string s]
    

    but not based on the return value

    // NOT valid
    public int this[int i]
    public string this[int i]
    
    0 讨论(0)
  • 2021-01-19 16:44

    I don't think you can specify a property only accessible with indexing, but you could just return an indexable value (like an array or List) and use [] on the result:

    public List<Aclass> Aproperty
    {
        get 
        {
             return this.theList;
        }
    }
    
    Aclass foo = this.Apropety[0];
    

    Of course, anything with an indexer will work instead of List.

    Or, you could do it the other way around: define an indexer (on the class itself) that returns an object that has a property Aproperty, used like so: Aclass foo = this[0].Aproperty.

    0 讨论(0)
  • 2021-01-19 17:04

    Since C# doesn't support parameterized properties (which is what you are showing), you need to convert this code to two functions, a GetAProperty(index) and a SetAProperty(index).

    We converted a 50,000+ LOC application from VB to C# and it required extensive modifications like this due to the dependence on parameterized properties. However, it is doable, it just requires a different way of thinking about properties like this.

    0 讨论(0)
提交回复
热议问题