추상 메서드로 추상 클래스를 작성하고 있습니다 (따라서 모든 클래스가이 메서드를 구현해야합니다). 그러나 각 메서드는 서로 다른 매개 변수를 사용하거나 매개 변수를 사용할 수 없으므로 메서드에서 사용해야하는 매개 변수를 지정하고 싶지 않습니다. 이름과 반환 값만 같아야합니다.매개 변수를 지정하지 않고 추상 메서드를 정의하십시오.
C#에서이 작업을 수행 할 수있는 방법이 있습니까?
도움 주셔서 감사합니다.
추상 메서드로 추상 클래스를 작성하고 있습니다 (따라서 모든 클래스가이 메서드를 구현해야합니다). 그러나 각 메서드는 서로 다른 매개 변수를 사용하거나 매개 변수를 사용할 수 없으므로 메서드에서 사용해야하는 매개 변수를 지정하고 싶지 않습니다. 이름과 반환 값만 같아야합니다.매개 변수를 지정하지 않고 추상 메서드를 정의하십시오.
C#에서이 작업을 수행 할 수있는 방법이 있습니까?
도움 주셔서 감사합니다.
아니요, 그렇게하는 것이 의미가 없습니다. 매개 변수를 선언하지 않으면 기본 클래스에 대한 참조 만 주어진 메서드를 호출 할 수 없습니다. 이것이 추상 메소드의 요점입니다. 호출자가 구체적인 구현을 신경 쓰지 않고 사용할 API를 제공 할 수있게하는 것입니다.
발신자가 정확한 메소드 서명을 알아야하는 경우 해당 호출자를 구체적인 구현에 연결하여 추상화를 근본적으로 쓸모 없게 만듭니다.
아마도 자세한 내용을 제공 할 수 있다면 더 적절한 방법을 제안 할 수 있을까요?
public class Foo<T>
{
public abstract void Bar(T t);
}
콘크리트 하위 유형 중 하나 도 일반, 또는 예를 들어 Foo<string>
에서 파생 수 있습니다 : 예를 들어, 일반적인 유형을 만들 수 있습니다.
아니요, 없습니다.
메서드를 재정의하려면 메서드 서명을 일치시켜야합니다. 여기에는 메소드 이름과 형식 매개 변수가 포함됩니다.
아니, 왜 필요합니까? 어쩌면 Command Design Pattern이 도움이 될지도 모릅니다.
당신이하려는 것은 코드 냄새입니다.
더 좋은 패턴은 추상적 클래스가 ISupportInitialize을 구현 한 다음 초록 Act()
메소드를 구현하는 것입니다.
BeginInit
과 EndInit
사이의 호출에서 자녀 유형이 행동 준비를 할 때 정보의 다양한 비트를 모으므로 무작위 유형 및 개수의 인수를 채우려 고합니다. 일단 구성되고 EndInit
이 호출되면 (여기에서 유효성을 검사하면) 요약 Act()
을 호출 할 수 있습니다.
,이 작업을 수행하지 마십시오하십시오 : 당신이 뭔가를 할 경우
public abstract void Act(params object[] arguments);
사람들은 아래를 사냥합니다.
각 자식은 다른 유형의 입력을 사용할 수 있지만 동일한 유형의 출력을 생성하는이 방법의 구현을 만들어야합니다. 따라서 출력을 사용하여 프로그램의 논리를 수행 할 수 있습니다. – TheBoss
@TheBoss : 추상 클래스 (인터페이스와 같은)의 요점은 일반적인 기능의 ... 잘 .. 추상화를 허용하는 것입니다. 당신은 "* Foo"라는 함수를 필요로하고 * 매개 변수를 취하고'int'를 반환하는 것과 같은 것을 정의 할 수는 없다. 그러한 함수는 그 서명이 정의되어 있지 않기 때문에 추상화 될 수 없다. 특정 서명이 정의 된 것보다 높은 수준에서 클래스를 참조하는 코드에서 (비 반영적으로) 호출하여 추상화를 깨는 것은 불가능합니다. –
@ TheBoss : Jon이 게시 한 코드 예제와 같이 Generics를 사용하여 디자인 과제를 해결하는 방법을 찾아야한다고 생각합니다. – code4life