나는 Ship
이라는 클래스와 Lifeboat
메소드를 숨겨 프로그래머가 호출하지 않지만 코드에서 사용할 수 있도록하려면 어떻게합니까?
이라는 클래스를 가지고있다. 구명 보트는 배를 상속한다.
Ship에는 저장 전에 호출되는 Validate()
이라는 메서드가 들어 있으며 Validate에서 호출하는 FurtherValidate()
이라는 추상 메서드가 있습니다. 이것이 존재하는 이유는베이스에서 validate를 호출 할 때 상속 된 클래스의 유효성을 검사하기 때문입니다. 그래서 우리는
public class Ship
public bool Validate()
{
//validate properties only found on a ship
FurtherValidate();
}
public abstract bool FurtherValidate();
이 그래서 Lifeboat
public override bool FurtherValidate()
{
//validate properties only found on a lifeboat
}
을 가지고이 Ship
를 구현하는 사람이 아니라 자신의 클래스에 대한 자신의 유효성 검사를 제공 할 필요가 의미하고 기본 선박으로 저장 호출 할 보장합니다. 차례로 계승 된 유효성 검사를 호출하는 Validate()
이 호출됩니다.
상속받은 클래스가 FurtherValidate()
을 구현하도록 강제하지만, 프로그래머가 결코 FurtherValidate()
을 호출 할 수 없도록하려면 어떻게 다시 할 수 있습니까? 현재 Lifeboat.FurtherValidate()
을 호출 할 수 있으며 어떻게 든이를 막으려 고합니다.
C#에서는 protected라고 표시된 클래스에 internal을 추가하면 범위를 좁히지 않고 표시 범위가 넓어집니다. 일리노이에서는 ProtectedOrInternal로 컴파일됩니다. 즉, 상속하는 모든 클래스에서이를 볼 수 있으며 어셈블리의 모든 클래스에서이를 볼 수 있습니다. IL에는 ProtectedAndInternal도 있지만 C#은 없습니다. –
앞으로 좋은 방법으로 IDE 속성을 사용할 것입니다. 대단히 고마워요 – Robert
예, 보호 및 내부를 모두 추가하면 가시성이 넓어집니다 ("보호 또는 내부"를 의미 함). –