내 응용 프로그램이 실행되는 CLR에 따라 두 가지 다른 동작이 나타납니다. 어떤 경우에는 닫힌 형식의 추상 속성을 반환하고 그렇지 않은 경우에는 추상 속성을 반환합니다. 속성은 추상적이므로 첫 번째가 옳은 것처럼 느껴집니다.GetMember는 닫힌 형식의 추상 속성을 반환해야합니까?
나는 다른 CLR 부 버전과 다른 시스템에 대한 물리적 실행 파일을 복사 한 후 .NET 3.5 SP1을 타겟팅 VS2010에서 다음을 컴파일 및 테스트 한 :
public abstract class BaseEntity<TId>
{
public abstract TId PK { get; set; }
}
public class DerivedEntity : BaseEntity<int>
{
public override int PK { get; set; }
}
class Program
{
static void Main(string[] args)
{
var derivedEntity = new DerivedEntity();
var type = derivedEntity.GetType();
var flags = BindingFlags.Public | BindingFlags.Instance | BindingFlags.SetProperty;
foreach (var memberInfo in type.GetMember("PK", flags))
{
Console.WriteLine(
"Member: " + memberInfo.Name
+ " from " + memberInfo.DeclaringType);
}
Console.WriteLine("Running : " + Environment.Version);
Console.WriteLine("mscorlib: " + typeof(int).Assembly.GetName().Version);
}
}
을 2.0.50727.4952 I를 실행하는 시스템에 내가 할 다른 출력
Member: PK from MemberInfoTest.DerivedEntity
Running : 2.0.50727.4952
mscorlib: 2.0.0.0
2.0.50727.3615를 실행하는 시스템에서 :
Member: PK from MemberInfoTest.DerivedEntity
Member: PK from MemberInfoTest.BaseEntity`1[System.Int32]
Running : 2.0.50727.3615
mscorlib: 2.0.0.0
,536,913을 다음과 같은 출력을 볼
위의 차이로 인해 다양한 상황에서 AmbiguousMatchException
이 발생합니다. 다음 중 올바른 행동과 다른 행동에 대한 "수정"이 있습니까?
EDIT : 방금 CLR-4 런타임을 대상으로 테스트를했는데 두 경우 모두 추상 닫힌 속성이 반환되지 않았으므로 첫 번째 동작이 올바른 것으로 나타났습니다.
답변이 없지만이 링크가 도움이 될 수 있습니다. http://stackoverflow.com/questions/212896/how-do-the-net-framework-clr-and-visual-studio-version-numbers-relate-to-each-o – airmanx86
당신은 정말로 abstract * property * ('PK')가 아니라 method *에 관한 것이지? – stakx
@stakx 당신 말이 맞습니다. –