를 포함하는의 반환. 어떻게 GenerateRandomInstance
메서드를 수정하여 Person 대신 Student를 반환 할 수 있습니까? 학생에게 사람을 캐스팅하면 오류가 발생합니다.정적 방법은의 목적은 내가 가지고있는 클래스 형
답변
수 없습니다. 정적 메서드는 자식 클래스에서 재정의 될 수 없으며 실제로 컴파일시 정확히 동일한 CIL을 생성한다는 점에서 Student.GenerateRandomInstance
과 Person.GenerateRandomInstance
—을 구별 할 수있는 방법이 없습니다.
는 대신 일반적인 방법을 사용할 수 있습니다
public static T GenerateRandomInstance<T>() where T : Person, new
{
var p = new T();
// randomize properties
return p;
}
Person.GenerateRandomInstance<Student>();
을하지만, 유형이 매개 변수가없는 생성자가있는 경우에만 작동합니다. 인수를 생성자에 전달하려면 다소 어려워집니다. 당신은 항상 당신이 당신이 할 수있는 생성자에 전달하려는 어떤 값을 알고 가정 : 물론
public static T GenerateRandomInstance<T>() where T : Person
{
var p = (T)Activator.CreateInstance(typeof(T), "hello", 4);
// randomize properties
return p;
}
, 지정된 유형이 적합한 생성자를 포함하지 않는 경우이 역시 실패합니다.
학생 클래스에서 GenerateRandomInstance()
메서드를 재정의해야합니다. 현재 Person의 기본 메소드가 호출되고 있습니다.
고정 방법 –
을 재정의 할 수 없습니다. 맞아요. 그것을 놓쳤습니다. 감사합니다 –
다음과 같이 시도해보십시오. Person
및 Student
은 각각 자신의 GenerateRandomInstance
및 RandomizeProperties
방법을 정의합니다. Student
은 기본 클래스가 알고있는 속성을 무작위 화하도록하기 위해 Person
의 RandomizeProperties
을 호출합니다. Student
그러면 Student
클래스에 의해 도입 된 속성 만 무작위 화됩니다.
참고 :이 문제는 종종 Abstract Factory 또는 Builder 디자인 패턴에 의해 해결됩니다. 아래 해결책은 그것들 중 어느 것도 아닙니다.
class Person
{
public string Name { get; set; }
public virtual void Speak()
{
Console.Write("Hello I am a person");
}
public static Person GenerateRandomInstance()
{
var o = new Person();
RandomizeProperties(o);
return o;
}
protected static void RandomizeProperties(Person o)
{
// randomize Person properties here
}
}
class Student : Person
{
public override void Speak()
{
Console.Write("Hello I am a student");
}
// note the use of the 'new' keyword
new public static Student GenerateRandomInstance()
{
var o = new Student();
RandomizeProperties(o);
return o;
}
protected static void RandomizeProperties(Student o)
{
Person.RandomizeProperties(o);
// randomize Student properties here
}
}
- 1. 내가 정적 클래스
- 2. 내가 정적 클래스 데이터가
- 3. 모의 정적 열거 형 최종 클래스
- 4. 정적 "DELETE"개체의 목적은 무엇입니까?
- 5. 정적 중첩 클래스 내가 정적 중첩 클래스 StatClass이
- 6. 목적은 우리가 클래스 대신
- 7. 목적은-c는 클래스
- 8. WPF 내가 가지고있는 색상
- 9. 내가 가지고있는 MySQL의
- 10. 파이썬 - 내가 가지고있는
- 11. 배쉬 : 내가 가지고있는
- 12. 내가 가지고있는 시간은 얼마나됩니까?
- 13. 내가 가지고있는 JPA는 @Formula
- 14. 이미지는 내가 가지고있는 펠리칸
- 15. 장고 MPTT - 내가 가지고있는
- 16. 는 내가 가지고있는 NSDictionary
- 17. 어떻게 내가 가지고있는 Web.config의
- 18. 내가 가지고있는 최고 수준의
- 19. 어떻게 내가 가지고있는 최고
- 20. 제거 그래서 내가 가지고있는
- 21. 등급이 내가 가지고있는 코드입니다
- 22. PHP는 내가 가지고있는 ID
- 23. 내가 가지고있는 비주얼 스튜디오 2008
- 24. 클래스 형
- 25. 정적 열거 형 대 비 정적 열거 형
- 26. PHP와 MySQL 오류 : 클래스 mysqli_result의 목적은 내가 오류를 얻고 문자열
- 27. 내부 클래스. 그 목적은 무엇입니까?
- 28. 클래스 목록 파일의 목적은 무엇입니까
- 29. 창 클래스 등록의 목적은 무엇입니까?
- 30. EXTBASE : 클래스 "Tx_Extbase_Persistence_ObjectStorage을"의 목적은
+1 고마워요! person 생성자는 2 개의 인수를 취합니다 ...이 좋은 대답을 게시 할 곳을 알지 못했다는 언급을해야합니다;) –
@TonoNam은 'Person'의 모든 하위 유형에 대해 동일한 매개 변수이거나 그들은 서로 다른 유형입니까? –
나는 1 분 안에 도움이 될만한 덕분에 거기에있게 될 편집 작업을하고 있습니다 ... –