나는 이와 같은 추상 클래스를 가지고있다;정적, 일반적인 방법으로 현재 유형 가져 오기?
public abstract PropertyBase
{
public static System.Type GetMyType()
{
return !!!SOME MAGIC HERE!!!
}
}
저는 서브 클래 싱을하고 정적 GetMyType()을 호출 할 때 하위 클래스의 유형을 반환하고 싶습니다. 그래서 내가 하위 타입을 선언하면; 내가
var typeName = ConcreteProperty.GetMyType().Name;
내가가 설정 될 '유형 이름을'기대 전화를 다음
public class ConcreteProperty: PropertyBase {}
"ConcreteProperty." 나는 그것을 할 수있는 방법이 없다고 생각하지만 거기에있는 누군가가이 정보를 얻을 수있는 방법을 알고 있다면 나는 흥미 롭다.
(내가 해결하기 위해 노력하고있어 특히 문제는 WPF에서 종속성 속성의 상세이다
class NamedObject : DependencyObject
{
// declare a name property as a type, not an instance.
private class NameProperty : PropertyBase<string, NamedObject> { }
// call static methods on the class to read the property
public string Name
{
get { return NameProperty.Get(this); }
set { NameProperty.Set(this, value); }
}
}
내가 거의을 가지고, 나는 이런 식으로 뭔가를 할 수있을 싶어요 구현,하지만 확실히 내 NameProperty 클래스에서 필요한 정보를 얻을 수 없습니다)
정적 인 이유는 무엇입니까? 가상 또는 추상으로 선언하면 문제가 발생할 수 있습니다. –
왜 고정적입니까 : 이상한 각도이며 한 C#은 실제로 설계되지 않았습니다. 경우에 따라 유형에 하나의 값만있을 수 있습니다. 따라서 '클래스 Steve : Person {}'은 유형을 선언하지만 가능한 값이 하나뿐이기 때문에 'Steve'클래스는 인스턴스를 식별합니다. 'Steve'유형을 선언하면 싱글 톤 'Steve'가 선언됩니다. WPF DP는 다음과 같습니다. 인스턴스 데이터, 메타 데이터 또는 유형인지 여부를 결정할 수 없습니다. 모든 코드를 하나의 코드로 구성하려고합니다. 그것은 모두 투기 적 ATM입니다. 그러나 나는 그것을 추구하는 것에 관심이 있습니다. –
다음과 같은 이유가 있습니다. 상용구 TypeDescriptor 코드의 부분 클래스 생성. 동적으로 생성 된 속성 이름은 형식에 정의 된 속성과 충돌 할 수 없으므로 형식 내에서 속성 이름 목록이 필요합니다. 이것은 더 많은 상용구 코드이므로 codegen에 포함됩니다. 그것도 변함이 없으므로 그것도 static을위한 완벽한 후보자입니다.그래서 정적 생성자 내에서 현재 유형의 속성을 포함하는 목록을 생성해야합니다. 글쎄, 지금은 T4 템플릿에서 마술 문자열을 사용해야합니다. – Will