Tirp Ответов: 1

Как изолировать и вернуть унаследованный класс со значениями из наследующего класса?


Привет ребята,

Я немного новичок в C# и хочу знать, как делать то, о чем я упоминал выше.
Ниже приведен код, который я использую, и я уже пробовал его несколько раз и подтвердил, что он работает каждый раз. Но мой вопрос в том, как это вообще работает?
Мне нужно знать для будущего применения.
(Кстати, приведенный ниже код-это не весь класс, но он содержит всю соответствующую информацию)

public class GameData : StoredData
{
    public StoredData GetStoredData()
    {
        return new StoredData
        {
            CityPopulation = CityPopulation,
            CityConVill = CityConVill,
            WellOffGrowth = WellOffGrowth,
            CityJobs = CityJobs,
            JobsGrowthRate = JobsGrowthRate,
            Gold = Gold,
            StoryProgress = StoryProgress,
            CurrentMissions = CurrentMissions,
            SettTrade = SettTrade,
            Speed = Speed,
            DisInfoList = DisInfoList,
            GoodsPrices = GoodsPrices,
            GoldProd = GoldProd,
            CityPopCap = CityPopCap,
            DevCount = DevCount,
            PopulationLimit = PopulationLimit
        };
    }
}



Любой вид вклада будет очень ценен. Заранее благодарю вас! :)

Что я уже пробовал:

Я пробовал бродить по интернету, но всегда попадаю на веб-страницы, которые даже не касаются того, что я хочу знать.
Я удалил все, что находится между "new StoredData{" и"};", и это волшебным образом больше не работает.

1 Ответов

Рейтинг:
5

OriginalGriff

В чем проблема? Все, что вы делаете, - это создаете новый экземпляр класса (который является базовым случаем для текущего класса) и возвращаете его. Тот факт, что переменные имеют одинаковые имена, не имеет значения, это просто выглядит странно для вас, потому что синтаксис инициализатора объекта работает именно так:

new ClassName { PropertyInClassName = value};
Вы можете написать это и получить то же самое:
public class A { int X {get; set;};}
public class B
    {
    public int X = 333;
    A GetA() 
        {
        int X = 12345;
        A a1 = new A{X = X};
        A a2 = new A{X = 666};
        }
    }
Система знает, что X-это имя свойства в классе A, поэтому она не может перепутать его с локальным X или уровнем класса X, который он маскирует.


Tirp

Мне очень жаль, что я думаю, что ты на правильном пути, но мне все еще трудно это понять. Из того, что я получаю, следует, что программа не будет путать "X" из класса A с "X" класса B.
Рассматривает ли компьютер переменную X слева как переменную класса A все время, и что X справа всегда из класса B?

OriginalGriff

Нет.
Имя свойства в классе а всегда находится слева от знака равенства в инициализаторе - и это единственное, что вы можете туда поместить, - но бит справа-это значение, вот и все. Это может быть константа или любое другое значение otehr, к которому можно получить доступ:

A a = new A{X = 123};  // Constant
A a = new A{X = myValue}; // Local to method
A a = new A{X = this.myValue}; // Local to class instance
A a = new A{X = myVar.MyMethod()}; // Totally different class value!
A a = new A{X = myList.Where(e => e.EnterDate == DateTime.Now.Date).FirstOrDefault()); // Complicated value to get hold of! :laugh:

Все законно!

Tirp

Спасибо Ориньялгрифф, теперь я все понял.
Кстати, есть ли более простой способ для меня сделать то, что я пытался сделать?
StoredData-это класс, который я использую при сохранении игры.
GameData-это основные данные, которые содержат всю информацию в моей игре и наследуются от StoredData.
Поскольку я не могу хранить все в GameData, мне нужно будет получить значения из GameData, которые можно найти в StoredData, когда я сохраню игру.

OriginalGriff

Всегда пожалуйста!
Я понятия не имею, куда делись концы моей строки или где внезапно появилась порция HTML-формы, но теперь это исправлено...

Я понятия не имею, чего вы пытаетесь достичь с помощью этого - я получаю только то, что вы печатаете для работы, я не могу видеть ваш экран или получить доступ к вашему жесткому диску - так что я даже не могу начать комментировать вашу идею "сохранить игру": у меня нет никакой информации для работы!

Tirp

Вообще-то, давай просто оставим все как есть. Я просто разберусь с этим, когда мне понадобится.

OriginalGriff

:большой палец вверх: