У меня проблемы с инкапсуляцией в C #. Есть два конкретных сценария, которые вызывают у меня проблемы, и я считаю, что проблема связана.
Сценарий # 1
У меня есть определение класса, которое выглядит примерно так
class MyClass
{
private int _someField;
private OtherClass _otherClass;
public int someField
{
get { return _someField; }
set { _someField = value; }
}
public OtherClass otherClass
{
get { return _otherClass; }
set { _otherClass = value; }
}
}
Если я тогда попытаюсь сделать что-то подобное в новом куске кода
MyClass theClass = new MyClass();
theClass.otherClass.XYZ += 1;
Мне сказали, что невозможно изменить возвращаемое значение MyClass.otherClass, поскольку оно не является переменной.
Сценарий 2 #
public partial class trksegType
{
private wptType[] trkptField;
private extensionsType extensionsField;
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("trkpt")]
public wptType[] trkpt
{
get
{
return this.trkptField;
}
set
{
this.trkptField = value;
}
}
}
Если я сейчас попытаюсь выполнить foreach через массив wptType:
foreach (wptType way in trk.trkseg[i])
Мне сказали - оператор foreach не может работать с переменными типа 'trksegType', потому что 'trksegType' не содержит открытого определения для 'GetEnumerator'
Даже если массив должен неявно разрешать перечисление.
Может ли кто-нибудь объяснить, что происходит и что я могу сделать, чтобы обойти эту проблему, сохраняя при этом лучшие практики.