나는이 질문에 대한 좋은 제목을 생각해 내는데 어려움을 겪었으므로 제안을 환영한다.일반적인 기본 클래스를 가진 객체를 얻는 최상의 느슨한 방법
public abstract class ActionBase
{
public abstract string Name { get; }
public abstract string Description { get; }
// rest of declaration follows
}
그리고 우리는 이러한 조치가 노동자에 집착 등 MoveFileAction, WriteToRegistryAction 같이, 정의 된 다른 작업의 무리가 있습니다
의 우리는 다음과 같은 형태 추상 기본 클래스 ActionBase 있다고 가정 해 봅시다 개체 :
public class Worker
{
private IList<ActionBase> _actions = new List<ActionBase>();
public IList<ActionBase> Actions { get { return _actions; } }
// worker stuff ...
}
지금까지 꽤 간단했습니다. 이제는 Workers 설정, 작업 할당, 속성 설정 등의 UI가 필요합니다. 이 UI에서는 사용 가능한 모든 액션 목록을 속성과 함께 제시하고자합니다. 먼저 사용할 수있는 액션의 이름과 설명 (유형 포함)을 모두 다음과 같은 컬렉션으로 모으고 싶습니다. 항목 유형 :
public class ActionDescriptor
{
public string Name { get; }
public string Description { get; }
poblic Type Type { get; }
}
물론이 방법으로 리플렉션을 사용할 수 있지만 더 좋은 방법이 있습니까? 이름과 설명을 ActionBase의 인스턴스 속성으로 설정하면 (파생 클래스의 정적 속성과 반대) 약간의 냄새가 날지 만 C#에는 추상 정적이 없습니다.
감사합니다.
정적 상속의 개념이 없기 때문에 '정적 인 추상화'가 없습니다. –
'정적 추상'에 대해 논쟁하지 않고 단지'abstract' 키워드가 계약을 시행하는 데 도움이된다는 것을 지적합니다. –
아마 나는 정교해야한다. 나는 정적 인 추상에 대해 논쟁하지 않고 있으며, 왜 C#에서 그것을 가지고 있지 않은지 이해합니다. 내가 의미했던 것은 Name과 Description 프로퍼티가 실제로 오브젝트 인스턴스에 많은 의미를 부여하지는 않지만, 각 구현이 이름과 설명을 갖도록 강요하고, 그와 계약을 강제 할 방법이 없다는 것입니다. static 속성. –