내 코드는 나중에 각각의 파생 된 유형으로 캐스팅 된베이스 클립이있는 목록을 사용하고 있습니다. 내가해야할 포인트를 쳤다.베이스 클래스에 대한 생성자를 만들면 그 타입이 무엇인지 알아 내서 그 타입으로 바꿀 수 있다고 생각했다. 다음과 같은 것 :생성자가 객체 유형을 변경하도록하십시오.
public class BaseClass
{
// Constructor
BaseClass(string Input)
{
if (Input.Substring(0, 5) == "Something")
return new DerivedClass(); // <-- Not allowed
}
}
public class DerivedClass : BaseClass
{
}
생성자가 void를 반환해야하기 때문에 허용되지 않습니다. "this"의 유형 변경도 허용되지 않습니다. 나는이 코드가 작동하는 매우 간단한 대안이 있다는 것을 알고 있지만, 그 코드에는 어떤 우아함이 있다고 생각합니까?
뭔가 다른 것을 만드는 생성자는 우아해야합니까 ?? –
네, C#의 생성자에서 아무것도 반환 할 수 없습니다. 'new'의 결과는 항상 그 타입의 구체적인 인스턴스입니다. 이 작업을 수행하려면 팩토리를 사용해야합니다. 팩토리는 생성 할 파생 형식을 결정하고 반환하는 함수입니다. –
와우, 너는 빠르다! 저의 요점은 이것을 코드화하는 방법을 찾는 것이 아니라 언어 그 자체에 대한 논의로 보는 것입니다. 이 접근법을 직관적으로 생각하는 유일한 사람입니까? – RagnarDa