나는 좋은 해결 방법을 생각할 수없는 문제를 우연히 발견했습니다.
내 프로그램에는 일부 이벤트에 대해 다시 초기화해야하는 개체가 있습니다. 다시 초기화해야하는 개체는 추상 클래스의 하위 클래스입니다.
그리고 앞으로 나아가는 것이 나쁜 방법 인 것처럼 보이지만 추상 클래스에 추상 reinitlize 함수를 사용하고 모든 하위 클래스가 함수를 구현하도록하기로 결정했습니다. 그러나 이제 각 하위 클래스가 생성자에서 다른 인수를 취하는 문제가 있습니다.
내가 가진 최소한의 예는 다음과 같습니다.
abstract class Base
{
public abstract void Init(/* Some parameter */);
}
class SubA : Base
{
public SubA(int a)
{
Init();
}
public override void Init(int a)
{
//do stuff with int
}
}
class SubB : Base
{
public SubB(string b)
{
Init();
}
public override void Init(string b)
{
//do stuff with string
}
}
class Program
{
static void Main(string[] args)
{
List<Base> stuff = new List<Base>()
{
new SubA(65),
new SubB("B")
};
foreach (var s in stuff)
{
s.Init();
}
}
}`
이 솔루션에 코드 냄새가 있다고 생각하므로이 시나리오를 피하는 제안을 환영합니다. 도움이 필요한 추가 정보가 있으면 알려주십시오.
솔루션은 간단 합니다. 전용 필드에 특정 변수를 선언 하고 해당 필드를 매개 변수없는 Init
메서드로 사용 하면됩니다.
class SubA : Base
{
private int _a;
public SubA(int a)
{
_a = a;
Init();
}
public override void Init()
{
//do stuff with int _a
}
}
class SubB : Base
{
private string _b;
public SubB(string b)
{
_b = b;
Init();
}
public override void Init()
{
//do stuff with string _b
}
}
또한 대신 클래스 인터페이스를 추상화하도록 만들 수 있으므로이를 구현하는 클래스는 다른 기본 클래스에서도 상속 할 수 있습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다