Что я могу сделать со свойствами .set и .get? - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть интерфейс

public interface IIntf { string Foo { get; set; } }

и класс

class MyClass : IIntf
{
    public string Foo { get; private set; }
}

.Теперь я получаю сообщение об ошибке компилятора

«MyClass» не реализует элемент интерфейса «IIntf.Foo.set».«MyClass.Foo.set» не является общедоступным.

Так что, похоже, Foo.set является каким-то образом своей собственной сущностью (и Foo.get аналогично). Могу ли я что-нибудь с ними сделать?Если да, что?

Например, я попытался реализовать отсутствующее свойство сеттера с помощью Foo.set - это даже было предложено Visual Studio

enter image description here

но я не нашел ни одного синтаксиса, который работает.Следуя предложению и пытаясь реализовать метод Foo.set (без соответствующего get, потому что он у меня уже есть), я получаю ошибку компилятора другого типа:

enter image description here

Но поскольку Visual Studio показывает (и иногда предлагает при вводе кода) Foo.set и Foo.get, я предполагаю, что с ними можно что-то сделать.Есть идеи что?Может быть, какой-нибудь приятный способ перенаправления методов только к получателю / только к установщику?Или что-то еще?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Работа с вопросами / вопросами, которые @Kjara поднял в комментариях:

  1. Свойства реализованы с использованием get и set методов за кулисами (компилятор).
  2. Вы не можете легко получить доступ к / обойти эти методы (без отражение ).
  3. При определении свойств вы должны определитьget и set одновременно (вы не можете определить get в одной строке и set в другой).
  4. Как в @FrankM и @Dirk выше - путаницаздесь, как представляется, проистекает из того факта, что в среде IDE (ложно) подразумевается, что вы можете определять геттер и сеттер отдельно.
0 голосов
/ 07 декабря 2018

Как это

public class MyClass : IIntf
{
    public string Foo { get; private set; }
    string IIntf.Foo { get => Foo; set => Foo = value; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...