공통 수퍼 클래스를 공유하지 않는 여러 '일반'객체를 List (예 : List)에서 수집하는 방법이 있습니까? 그렇다면 공통 속성에 어떻게 액세스 할 수 있습니까? 예를 들어일반 객체의 일반이 아닌 멤버에 액세스
:
는 물론, 이것은 의사 코드는class MyObject<T>
{
public T Value { get; set; }
public string Name { get; set; }
public MyObject(string name, T value)
{
Name = name;
Value = value;
}
}
var fst = new MyObject<int>("fst", 42);
var snd = new MyObject<bool>("snd", true);
List<MyObject<?>> list = new List<MyObject<?>>(){fst, snd};
foreach (MyObject<?> o in list)
Console.WriteLine(o.Name);
,이 작동하지 않습니다.
또한 .Value 속성에 액세스 할 필요가 없습니다 (형식 유지가되지 않으므로).
편집 : 이제 이것에 대해 생각해 봤는데, 이것에 하위 클래스를 사용할 수 있습니다. 그러나, 나는 모든 새로운 타입에 대해 새로운 서브 클래스를 작성해야한다는 것을 의미한다고 생각한다.
Grzenio @ 네, 정확히 내 질문에 대답있다. 물론 지금은 전체 공유 인터페이스를 복제해야하지만 큰 문제는 아닙니다. 나는 그걸 생각해 봤어야했는데 ..
@aku 당신은 오리 타이핑에 관한 권리가 있습니다. 두 개의 완전히 무작위적인 유형의 객체가 액세스 가능할 것으로 기대하지는 않습니다.
그러나 일반 객체가 일종의 공통 인터페이스를 공유한다고 생각했습니다. 매개 변수가있는 유형을 제외하고는 똑같은 인터페이스를 사용하기 때문입니다. 분명히 이것은 자동으로 해당되지 않습니다.