문제

샘플 수업이 있습니다.

class SampleClass
{
   public virtual string SomeProperty{get; set;}
   public virtual void SomeMethod() {
      // code
   }
}

이를 상속하고 다음과 같이 SomeProperty 및 SomeMethod를 재정의할 수 있습니다.

class ChildClass:SampleClass
{
   public override string SomeProperty{get; set;}
   public override void SomeMethod() {
      // code
   }
}

내가 재정의할 수 있는 방법이 있나요? 물체, 수업 중이 아니신가요?좋다

SampleClass sampleObject = new sampleObject();

그리고 SampleObject.SomeMethod()가 고유해야 합니까?감사해요.

도움이 되었습니까?

해결책

아니요, 객체별로 재정의 할 수 없습니다. 그러나 다른 객체에 다른 행동 모델을 제공하려면 항상 대의원을 생성자에게 전달할 수 있습니다.

public class ChildClass : SampleClass
{
   private readonly Action someMethodBehavior;

   public ChildClass(Action someMethodBehavior) {
       this.someMethodBehavior = someMethodBehavior;
   }

   public override void SomeMethod() {
      someMethodBehavior();
   }
}

이는 각 객체가 자신의 동작을 효과적으로 지정할 수있게합니다. 널 대의원 참조를 통해 일종의 옵트 인 재정의가되기를 원한다면 "기본 조치를 수행하는 것"을 의미 할 수도 있습니다.

다른 팁

당신이 성취하려는 것을 완전히 확신하지 못하지만 당신은 그냥

SampleClass sampleObject = new ChildClass();

그런 다음 실제로 샘플 클래스를 취한 함수로 SampleObject를 전달할 수 있습니다. 비록 실제로 Childclass이지만 기능이 가상이므로 재정의 기능이 호출됩니다.

아니요 - 객체에서 무시할 수있는 방법이 없습니다! 사실 나는 당신이 무엇을 오해하고 대상이라는 것을 오해한다고 생각합니다. 객체는 클래스의 인스턴스입니다. 자체가 정의 된 방법과 속성을 정의하지 않은 객체는 객체가 속한 클래스에서 나옵니다.

당신이 이런 종류의 일을 시도하고해야한다면 당신은 잘못된 길을 가고 있다는 것입니다 ...

귀하의 질문은 약간 불분명하지만 원하는 것을 정확히 할 수는 없습니다. 익명의 클래스는 Java와 같이 C#에 존재하지 않습니다. 해당 인스턴스에 대한 서브 클래스 및 메소드 오버라이드를 작성해야합니다. 코드를 선언하는 클래스 내에서 서브 클래스를 비공개로 만들 수 있습니다.이 방법으로 샘플 클래스로만 액세스 할 수 있으며 childclass가 아닙니다.

뭔가 잘못된 방향으로 가고 있는 것 같은데 왜 재정의된 하위 클래스를 만들지 않는지 잘 모르겠습니다. SomeMethod() 방법이지만...

유일한 방법은 이를 염두에 두고 대리자 속성을 유지하면서 클래스를 명시적으로 만드는 것입니다.그 다음에 SomeMethod() 대리자를 호출합니다(아마도 개체가 생성될 때 설정됨).

하지만 대리자는 여전히 private 또는 protected 멤버에 대한 액세스가 허용되지 않습니다. 그러나 최소한 영리한 인수가 전달되지 않으면 실제로는 많이 사용되지 않습니다.

아뇨. C#에서는 불가능합니다. 원하는 행동으로 새로운 클래스를 만들어야합니다.

클래스는 인스턴스에 대한 청사진입니다 ... 왜 파란색 인쇄없이 객체를 만들고 싶습니까?

모든 런타 타임은 청사진없이 객체를 만들도록 제한하지만, 객체를 사용하여 청색 인쇄에 액세스 할 수 있으며이를 반사라고합니다. 객체는 파란색 프린트를 반영합니다.

나는 당신이 가장하는 것을 가장 잘 묘사하는 것은 Java의 익명 수업이라고 생각합니다. C#은 익명 유형의 메소드를 무시할 수 없으며 실제로 어떤 것도 무시할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top