문제

클래스 A와 B의 사례가 있으며 두 클래스 모두 멤버 '텍스트'를 구현합니다. 일반적인 방식으로 회원 텍스트에 액세스하는 방법이 있습니까? 나는 단순히 말하는 JavaScript 방법과 유사한 것을 바라고 있습니다.

instance['Text'] = value;

참고 :이 두 클래스는 불행히도 텍스트 멤버와 동일한 인터페이스를 구현하지 않습니다.

도움이 되었습니까?

해결책

JavaScript와 달리 C#은 정적 언어이며 두 클래스 모두 공통 인터페이스 또는 기본 클래스를 구현하지 않으면 반사를 사용하여 동일한 목표를 달성 할 수 있습니다.

instance.GetType().GetProperty("Text").SetValue(instance, "new value", null);

다른 팁

A와 B를 만들 수 없으면 동일한 인터페이스를 구현하면 사용해야합니다. 반사 이름으로 모든 클래스 멤버에 액세스하려면 다음과 같은 것입니다.

typeof(A).GetProperty("Text").GetValue(theInstance, null);

어디 theInstance A 클래스의 사례입니다.

이상적으로는 A와 B의 기본이 될 멤버 "텍스트"가있는 단일 클래스가 있어야합니다. 다른 방식으로 똑같이 할 수있는 곳에서 반사를 사용하지 마십시오.

A와 B를 만들 수있는 경우 동일한 인터페이스를 구현하십시오.

 interface ISomeGenericNameForAAndB
{
    string Text { get; }
}
class A :ISomeGenericNameForAAndB
{
    public string Text { get { return "some Text from A"; } }    
}
class B : ISomeGenericNameForAAndB
{
    public string Text { get { return "some Text from B"; } }
}

ISomeGenericNameForAAndB anAInstance = new A();
ISomeGenericNameForAAndB aBInstance = new B();
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top