По первому вопросу, да, вы правы.Свойства first
и second
имеют частный установщик и публичный получатель.Однако, как написано, ваш код не будет компилироваться.Если вы укажете модификатор доступа для метода получения или установки, он должен быть более строгим, чем модификатор доступа для свойства, и вы не можете указать модификатор доступа для обоих свойств.Кроме того, обратите внимание, что в идиоматике C # мы пишем сначала метод get, а затем метод setter и присваиваем свойствам имена PascalCase, например
public double First { get; private set; }
. Это позволит получить свойство с именем First
с использованием public
getter и a private
setter и написано идиоматически.
Для второго вопроса вам следует использовать generics .Вы можете сделать все это так:
public class MyTuple<T1, T2> {
private readonly T1 first;
public T1 First { get { return this.first; } }
private readonly T2 second;
public T2 Second { get { return this.second; } }
public MyTuple(T1 first, T2 second) {
this.first = first;
this.second = second;
}
}
Но это уже встроено в .NET Framework.Вы можете просто использовать Tuple<T1, T2>
.Обратите внимание, что его свойства Item1
и Item2
(аналогичные вашим first
и second
) имеют открытый метод получения;он поддерживается полем private readonly
.