используя явную реализацию интерфейса - PullRequest
3 голосов
/ 29 марта 2012

Я пытаюсь изменить тип свойства в классе реализации интерфейса, используя явную реализацию интерфейса.

interface ISample
{    
   object Value { get; set; }     
} 

class SampleA : ISample
{    
   SomeClass1 Value { get; set; } 

   object ISample.Value
    {    
        get { return this.Value; }
        set { this.Value = (SomeClass1)value; }
    }    
}


class SampleB : ISample
{

   SomeClass2 Value { get; set; } 

   object ISample.Value
    {    
        get { return this.Value; }
        set { this.Value = (SomeClass2)value; }    
    }    
}

class SomeClass1
{    
   string s1;    
   string s2;    
}

Но когда мне нужно передать интерфейсный объект в функцию, я не могу получить доступ к объектам SomeClass1 или SomeClass2.

Например:

public void MethodA(ISample sample)    
{    
  string str = sample.Value.s1;//doesnt work.How can I access s1 using ISample??    
}

Я не знаю, понятно ли это, но я не могу найти более простой способ объяснить это. Есть ли способ получить доступ к свойствам SomeClass1 с помощью интерфейса ISample?

Спасибо

1 Ответ

1 голос
/ 29 марта 2012

Это потому, что вы получили объект в качестве интерфейса, поэтому он не знает о новом типе свойства класса.Вам может понадобиться:

public void MethodA(ISample sample)
{
  if (sample is SampleA)
  {
    string str = ((SampleA)sample).Value.s1;
  }     
}

Лучшим решением может быть использование шаблона visitor - который будет иметь реализации для обработки различных ISample.

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