기본 클래스의 속성에 속성을 추가하려면?어떻게 지금과 같은 몇 가지 모델 수업을
답변
메타 데이터 클래스를 사용해보십시오. 간접적으로 모델 클래스에 데이터 주석을 추가 할 수있는 속성을 사용하여 참조되는 별도의 클래스입니다.
[MetadataType(typeof(MyModelMetadata))]
public class MyModel : MyModelBase {
... /* the current model code */
}
internal class MyModelMetadata {
[Required]
public string Name { get; set; }
}
아무도 downvote에 대한 코멘트 신경? 엄밀히 말하면 이것은 나에게 정확 해 보인다. (원래의 대답과 비슷한 것을 추가했다.) –
내 생각 엔 DataAnnotations 네임 스페이스의 특성에 대해서만 작동하므로 일반 솔루션이 아닐 것입니다. – Marchy
[MSDN] (https://msdn.microsoft.com/en-us/library/ff664465%28v=pandp.50%29.aspx)에는 ** MyModel **이 부분적이어야한다고 나와 있습니다. –
가상으로 상위 클래스의 속성을 선언 : 당신이 DataAnnotations 대해 얘기로 ... 한 (
public class MyModelBase
{
public virtual string Name { get; set; }
}
public class MyModel : MyModelBase
{
[Required]
public override string Name { get; set; }
public string SomeOtherProperty { get; set; }
}
또는 유효성 검증을 처리하는 MetadataType를 사용할 수 있습니다 그렇지 않으면 ' 위의 예제와 다시 붙어서) :
class MyModelMetadata
{
[Required]
public string Name { get; set; }
public string SomeOtherProperty { get; set; }
}
[MetadataType(typeof(MyModelMetadata))]
public class MyModel : MyModelBase
{
public string SomeOtherProperty { get; set; }
}
당신이 잃고 싶지 않은 추가 행동이 있다면이 방법이 있습니다. +1 – Yuck
이제 기본 생성자에서 잠재적 인 가상 호출을주의해야합니다. – nicodemus13
[MSDN] (https://msdn.microsoft.com/en-us/library/ff664465%28v=pandp.50%29.aspx)에 따르면 ** MyModel **은 부분적이어야합니다. –
이러한 대답 중 실제로는 기본 Name 속성을 올바르게 호출하지 않습니다. 재정의는 새 속성에 대해 별도의 값이 없도록 다음과 같이 작성해야합니다.
public class MyModelBase
{
public virtual string Name { get; set; }
}
public class MyModel : MyModelBase
{
[Required]
public override string Name { get { return base.Name; } set { base.Name = value; }
public string SomeOtherProperty { get; set; }
}
나는 그것이 왜 필요한지를 보지 못한다. 만약 당신이 말하는 것이 사실이라면,이 코드는 작동하지 않아야합니다. 그러나 작동합니다 : http://csharppad.com/gist/c5db27fb3b90f961a2da. 그 컴파일러는 재정의 된 자동 속성을 자동으로 처리합니다. – Spook
@ Spook 기본 클래스 (예 : Setter의 RaisePropertyChanged)에서 사용자 지정 구현이 필요한 경우에만 필요하다고 생각합니다. 하위 클래스에서 자동 속성 만 사용하면 기본 클래스의 getter/setter가 호출되지 않습니다. – Ryan
"new"키워드로 기본 속성을 오버로드 할 수 있습니다.
public class MyModelBase
{
public string Name { get; set; }
}
public class MyModel : MyModelBase
{
[Required]
public new string Name {get; set;}
public string SomeOtherProperty { get; set; }
}
- 1. 나는이 세 가지 수업을
- 2. Html.DropDownList 선택 값은 내가 지금과 같은 드롭 다운 목록이 모델
- 3. 몇 가지 "보안 모델"이 있습니까?
- 4. 어떻게 데이터의 그룹 내에서 정렬하고 내가 지금과 같은 데이터 집합이
- 5. 나는 다음과 같은 샘플과 같은 몇 가지 C# 코드가
- 6. 나는 몇 가지 조치가 어떻게 하나의 측정
- 7. PHP는 내가 지금과 같은 URL로 양식에서 게시하도록하겠습니다
- 8. 수업을 어떻게 구성합니까?
- 9. 몇 가지 질문은 autofac
- 10. 수업을 어떻게 설정해야합니까?
- 11. 몇 가지 모델 연결을 통해 얻을 수있는 레일즈 또는 SQL
- 12. 나는 다음과 같은 몇 가지 포인트에 대한 경로를 그리는 그래프보기가
- 13. CakePHP : 모델, 컨트롤러 및 검색 데이터에 대한 몇 가지 질문이
- 14. 몇 가지 질문
- 15. 몇 가지 옵션을
- 16. PyQt와 관련된 몇 가지 질문
- 17. 큰 프로젝트에서 어떻게 수업을 구성합니까?
- 18. 디자인과 관련된 몇 가지 질문
- 19. 캐싱에 대한 몇 가지 질문
- 20. IPv6와 관련된 몇 가지 질문
- 21. 순열에 대한 몇 가지 질문
- 22. 몇 가지 Lucene 관련 질문
- 23. Android, Imageview, 몇 가지 질문
- 24. 나는 몇 가지 (희망)가
- 25. 몇 가지 양식에서 이벤트 제출
- 26. 간단한 jQuery를 콜백은이 같은 몇 가지 기능을 가지고 IE
- 27. 나는이 같은 몇 가지 아주 간단한 예제 코드가 파일
- 28. jQuery를 : 나는 다음과 같은 몇 가지 jQuery를 가지고
- 29. 데이터 바인딩은이 같은 특성을 가지고 몇 가지 클래스를 가지고
- 30. JQuery와 나는 서로 다음과 같은 몇 가지 div의이 파이어 폭스
데이터 주석에 대해 질문합니까? 그렇지 않다면 어떤 [필수] 속성을 요구하고있는 것입니다. –