나는 다양한 초기화 작업을 수행하는 오랜 시간이 걸리는 생성자를 가지고 있기 때문에이 작업 중 일부를 일부 기능으로 제외하려고합니다. 이 말은 저에게 함수 인스턴스 나 정적 메소드를 만들어야하는지 궁금합니다. 생성자에서 가상 함수를 호출하는 위험을 이해하지만 100 % 인스턴스화되지 않은 객체에 인스턴스 메서드를 호출하는 것이 옳지 않다고 생각합니다. 분명히 이것은 모순이다.C#의 생성자에서 인스턴스 메서드 호출하기
나는이 문제에 대한 국민들의 의견에 관심이있다. 또한 초기화 된 변수를 반환하는 정적 메서드를 사용하여 멤버 대상을 읽기 전용으로 만들 수 있음을 발견했습니다. 여기 내 시나리오를 간략하게 보여줍니다.
public class A
{
private readonly string _foo;
public A()
{
_foo = InitialiseFoo();
}
private static InitialiseFoo()
{
// Do stuff
return new string ("foo");
}
}
왜 긴 생성자가 있습니까? 그것이 생성자가되어야하는 방법이 아닙니다. 긴 작업을 수행하는 메소드를 사용해야합니다. 당신이 어떤 API를 소비하려고 할 때 항상 좌절감을 느낍니다. 그리고이 API는 데이터베이스 액세스와 생성자에서 물건을 가져다가 잠재적으로 예외와 물건을 던집니다. 해라. 정말 짜증나. 생성자는 단순해야합니다. –
전적으로 이것에 동의하지만, 먼저 구성 파일에서 서비스 이름을 가져와야하는 Windows 서비스를 코딩하고 있습니다. 그것의 생성자 내에서만 서비스 이름을 설정할 수 있기 때문에 나는 이것에 매달렸다. – user738134