3
명시 적 인터페이스 구현을 사용하여 인터페이스 구현 클래스의 속성 유형을 변경하려고합니다.명시 적 인터페이스 구현 사용
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;
}
하지만 함수에서 인터페이스 obj를 전달해야 할 때 SomeClass1 또는 SomeClass2의 객체에 액세스 할 수 없습니다. 예를 들어
:
public void MethodA(ISample sample)
{
string str = sample.Value.s1;//doesnt work.How can I access s1 using ISample??
}
이 이해할 수 있다면 나도 몰라,하지만이 설명 할 수있는 쉬운 방법을 얻을 수가 캔트. 인터페이스 ISample을 사용하여 SomeClass1의 속성에 액세스하는 방법이 있습니까?
감사
당신이 인터페이스와 객체를받은, 그래서 클래스의 새 속성 유형에 대해 알고하지 않기 때문이다
'SomeClass1'은'ISample'의 타입이 아닌 속성의 타입이고'ISample'가'SampleA'의 경우 예외가 던져지기 때문에 – ntziolis
다음에 제약 조건을 사용합니다 : 사물이 공개된다고 가정하면, 그의 코드는 그것을 공개하지 않는 것으로 보여줍니다. – payo
ntziolis에 대한 몇 가지 유형 검사를 추가했습니다. 안전한 경로가 표시되지 않았으므로 객체를 캐스팅하는 방법을 보여 줬습니다. 분명히 코드를보다 신뢰성있게 만들기 위해 일부 디자인을 추가해야합니다. – payo