У меня возникли проблемы с пониманием того, как правильно инкапсулировать мой класс. Это (или должно быть).Как правильно скрыть помощники (внутренние) классы внутри класса в C#
Я использую «вспомогательный класс», и я хочу, чтобы он не был доступен снаружи.
namespace MyApp
{
[Flags]
public enum OctaveGroups
{
None = 0,
oneOctave = 1
}
class Frequencies
{
// HelperClass
public class Frequency
{
public string Name { get; set; }
public OctaveGroups Octave { get; set; }
}
public readonly static List<Frequency> All = new List<Frequency>
{
#region Complete Frequencies Data
new Frequency { Name = "63", Hz = 63,
Octave = OctaveGroups.oneOctave | OctaveGroups.None,
},
new Frequency { Name = "80", Hz = 80,
Octave = OctaveGroups.None,
}
// And so on..
//..
#endregion
};
public readonly List<Frequency> OneOctave = All.Where(f => f.Octave.HasFlag(OctaveGroups.oneOctave)).ToList();
public readonly List<Frequency> None = All.Where(f => f.Octave.HasFlag(OctaveGroups.None)).ToList();
}
}
Если бы я сделать мой Frequency
класс protected
или private
я получаю эту ошибку:
Inconsistent accessibility: field type 'List' is less accesible than field 'Frequencies.All'
я получаю ту же ошибку, если я class Frequency
и List<Frequency> All
защищены и попытаться сделать метод, который возвращает List<Frequency>
например:
public List<Frequency> GetAll()
{
return All.Where(f => f.Octave.HasFlag(OctaveGroups.OneOctave)).ToList();
}
Каким будет правильный способ разоблачения .All
.OneOctave
и .None
поля, сохраняя их только для чтения?
Если вы хотите, чтобы 'GetAll' был общедоступным,' Frequency' должен быть общедоступным. В чем вопрос? Что вы подразумеваете под «держать их только для чтения»?Метод, который возвращает материал, как это можно читать только, за исключением возвращения неизменных результатов? –
Если вы подвергаете воздействию частоты, вы не можете сделать ее ни частной, ни защищенной, но если вам нужна неизменность, вы можете сделать внутренние сеттеры –
Я потерял абзац в моей копии/вставке кода. Я хочу (если это возможно), чтобы мой помощник 'Class Frequency' не был доступен, потому что мне это не нужно в любом другом месте. – distante