2016-02-16 4 views
0

Скажите, что у меня есть public class MyClass: List<MyObjects>.При определении класса, который расширяет список, как я могу ссылаться на список из его внутренних методов?

Я хочу, чтобы этот класс, чтобы иметь внутренний метод, который манипулирует список, скажем

void ConstructListFromJSON(){ 
HoweverIshouldrefertomylist = JsonUtility.FromJson<List<MyObjects>("myObjects.json"); 
} 

Что я должен поставить на место HoweverIshouldrefertomylist? Я пробовал this, self и аналогичный, но он не работает. Конечно, есть способ обратиться к структуре данных в списке?

+2

Думаю, вы на самом деле должны использовать [композицию вместо наследования] (https://en.wikipedia.org/wiki/Composition_over_inheritance). – juharr

+0

@juharr Да, это, вероятно, не идеальное решение для моей текущей проблемы, но независимо от того, есть ли способ сделать эту ссылку? Из любопытства. – kace91

ответ

0

Вы не можете переназначить this, поэтому очистить список и добавить все, что вы хотите добавить:

var objectsToStore = JsonUtility.FromJson<List<MyObjects>>("myObjects.json"); 
this.Clear(); 
this.AddRange(objectsToStore); 

Но в общем, вы действительно не хотите, чтобы наследовать от List<T>. См. Why not inherit from List<T>?. Использование композиция вместо:

public class MyClass 
{ 
    public List<YourObjects> YourObjects { get; set; } 

    public void ConstructListFromJSON() 
    { 
     YourObjects = JsonUtility.FromJson<List<MyObjects>("myObjects.json"); 
    } 
} 

Чтобы правильно создавать классы, представляющих вашего JSON см Deserializing JSON into an object

0

Чтобы получить доступ к базовому объекту, просто используйте базовое ключевое слово. Но для того, что вы показываете, другой подход имеет больше смысла - просто поддерживайте ссылку на частный объект.

public class foo{ 

    private List<MyObject> myList = null; 

    public foo(List<MyObject> l){ 
     myList = l; 
    } 

} 

Теперь класс имеет список при строительстве, но этот список является частным для пользователя. Это лучшая форма дизайна. Он использует состав над наследованием и обеспечивает более слабосвязанный дизайн.

Смежные вопросы