Как получить доступ к методам класса после установки объекта в качестве интерфейса? - PullRequest
0 голосов
/ 05 мая 2020

Я бы хотел иметь такой интерфейс, как IResult result = new SomeResult(), а затем, в зависимости от некоторых if, получить доступ к некоторым конкретным полям c после преобразования.

if (a == b) 
{
   result = (SomeOtherResult) result;
   result.fieldFromSomeOtherResult = 42;
}

Очевидно теперь я не могу этого сделать, потому что интерфейс result не имеет этого поля, как и SomeResult class, только SomeOtherResult class. Как мне решить эту проблему?

1 Ответ

4 голосов
/ 05 мая 2020

Если вы используете C# 7.0 или новее, используйте оператор is:

IResult result = new SomeResult();

if( a == b )
{
    if( result is SomeResult someResult )
    {
        someResult.fieldFromSomeOtherResult = 42;
    }
    else if( result is SomeOtherResult someOtherResult )
    {
        someOtherResult.x = 123;
    }
} 

Тем не менее, если вы инициализируете IResult result с помощью явного new SomeResult(), тогда вы должен объявить result с типом SomeResult.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...