C # 3.0, objekt Inicializátor a získat vlastnost vracet pole, jak inicializovat?

hlasů
1

Který má následující třídy:

public class SomeClass
{
    private readonly int[] _someThings;

    public SomeClass()
    {
        _someThings = new int[4];
    }

    public int[] SomeThings
    {
        get { return _someThings; }
    }
}

Jak bych mohl použít syntaxi objektu inicializátor inicializovat něco přes vlastnost jako v následujícím (nepracovní) kód výpisu?

var anObject = new SomeClass
    {
        SomeThings[0] = 4,
        SomeThings[3] = 8
    }

Aktualizace

Dalo by se dělat (i bez stanoveného vlastnictví):

anObject.SomeThings[0] = 4;
anObject.SomeThings[3] = 8;

Ale snažím se použít syntaxi objektu inicializátor.

Položena 13/05/2009 v 15:57
zdroj uživatelem
V jiných jazycích...                            


4 odpovědí

hlasů
3

Pokud vím, Ty by mohly mít pouze metody Add takto:

public class SomeClass
{
  void Add(int index, int item) 
  { 
    // ...
  }
}

var anObject = new SomeClass()
    {
        {0, 4}, // Calls Add(0, 4)
        {4, 8}  // Calls Add(4, 8)
    }
Odpovězeno 13/05/2009 v 16:00
zdroj uživatelem

hlasů
2

Objekt inicializátor syntaxe je „syntaktický cukr“ pro nastavení veřejné vlastnosti.

Není veřejná seřizovač pro Somethings, takže můžete to udělat takhle.

Takže tohle...

Foo x = new Foo() { Bar = "cheese" };

... je stejné jako ...

Foo x = new Foo();
x.Bar = "cheese;

... a jako takový nemá žádnou schopnost dosáhnout do soukromých členů nastavit věci.

Odpovězeno 13/05/2009 v 15:59
zdroj uživatelem

hlasů
0

Dalo by se přidat přetížený konstruktor:

public class SomeClass
{
    private readonly int[] _someThings;

    public SomeClass()
    {
        _someThings = new int[4];
    }

    public SomeClass(int[] someThings)
    {
        _someThings = someThings;
    }

    public int[] SomeThings
    {
        get { return _someThings; }
    }
}

...

        var anObject = new SomeClass(new [] {4, 8});
Odpovězeno 13/05/2009 v 16:04
zdroj uživatelem

hlasů
0

Teoreticky by to mohlo udělat takto:

var anObject = new SomeClass {
    InitialSomeThings = new[] {
         1,
         2,
         3,
         4
    }
}

class SomeClass {
    private readonly int[] _somethings;
    public int[] 
       get { return _somethings; }
    }

    public int[] InitialSomeThings {
       set { 
           for(int i=0; i<value.Length; i++)
               _somethings[i] = value[i];
       }
   }
}
Odpovězeno 13/05/2009 v 16:02
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more