동일한 클래스 인스턴스의 동일한 클래스 멤버에 액세스
문제
클래스 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();
제휴하지 않습니다 StackOverflow