Как правильно настроить C# методы, чтобы при работе с ними из свойств в другом классе нельзя было обойти get свойство через внутренние методы и ссылки
Основной класс, с какой-то логикой:
class A
{
private int i = 0;
public int I
{
get => i;
set => i = value;
}
public int GetI()
{
return i;
}
public void SetI(int I)
{
this.I = I;
}
}
Класс, где нужно чтобы можно было только читать переменную, но не в коем образе ее не изменять, даже через методы встроенные в класс A:
class B
{
private A aa = new A();
public A AA
{
get => aa;
}
}
Пример уже работы с классом B:
B b = new B();
Console.WriteLine(b.AA.I);//выведет 0
b.AA.I = 1;
Console.WriteLine(b.AA.I);//выведет 1
b.AA.SetI(2);
Console.WriteLine(b.AA.I);//выведет 2
Собственно, как реализовать в классе A, логику, если он находится в свойстве которое не имеет set свойство, чтобы не работали некоторые функции.
Ответы (1 шт):
Автор решения: aepot
→ Ссылка
Создать интерфейс
interface IReadOnlyA
{
int I { get; }
int GetI();
}
class A : IReadOnlyA
{
// ...тот же самый код
}
class B
{
private A aa = new A();
public IReadOnlyA AA
{
get => aa;
}
}
Получится так
B b = new B();
Console.WriteLine(b.AA.I);
b.AA.I = 1; // CS0200 Property or indexer 'IReadOnlyA.I' cannot be assigned to --it is read only
Console.WriteLine(b.AA.I);
b.AA.SetI(2); // CS1061 'IReadOnlyA' does not contain a definition for 'SetI' and no accessible extension method 'SetI' accepting a first argument of type 'IReadOnlyA' could be found(are you missing a using directive or an assembly reference ?)
Console.WriteLine(b.AA.I);