그래서 기본적으로 인스턴스를 가져 와서 목록에 추가하는 개체가 있습니다. 각 인스턴스는 가상 메소드를 사용하며, 일단 인스턴스가 작성되면이를 대체해야합니다. 인스턴스의 메서드를 재정의하려면 어떻게해야합니까?C# 인스턴스 메서드를 재정의
3
A
답변
14
수 없습니다. 클래스를 정의 할 때만 메소드를 재정의 할 수 있습니다. 개체가이 동작을 변경할 수 없습니다 생성되면
public class SomeClass
{
public Func<string> Method { get; set; }
public void PrintSomething()
{
if(Method != null) Console.WriteLine(Method());
}
}
// Elsewhere in your application
var instance = new SomeClass();
instance.Method =() => "Hello World!";
instance.PrintSomething(); // Prints "Hello World!"
0
C 번호가 정적 인 :
최선의 선택은 자리 표시 자로 적절한 Func
대리자를 사용하여 호출자가 구현 그런 식으로 제공 할 수 있도록 대신입니다 그 물체. inhertance를 사용하여 수퍼 클래스를 하위 클래스로 만들 수 있지만 이는 런타임이 아닌 designtime에서 수행됩니다.
class foo
{
public virtual void dosomething()
{
console.writeline("this is foo");
}
}
class bar : foo
{
public override void dosomething()
{
console.writeline("this is bar");
}
}
var list = new Foo[]{new foo(), new bar()};
또한 AOP - aspect 지향 프로그래밍의 개념이 있습니다. 여기서 런타임에 동작을 주입 할 수 있습니다. 내가 그 알고 있어요 2 개 프레임 워크가이
- 성 동적 프록시
- Spring.Net 실행시 수는 없습니다
+0
나는 이것을 고려했다. 그러나 얼마나 많은 객체 유형이 정의 될지 모르겠다. – tsturzl
0
을한다. 클래스의 동작이 인스턴스화되면 변경할 수 없습니다. 그러나 당신은 대리자 메서드를 만들 수 있습니다.)
관련 문제
- 1. 델리게이트/DLR 람다를 사용하여 인스턴스 메서드를 재정의 하시겠습니까?
- 2. PHP 클래스 인스턴스 재정의
- 3. Django의 RelatedManager 메서드를 재정의
- 4. 정적 메서드로 인스턴스 메서드 재정의
- 5. 클래스 필드의 ToString() 메서드를 재정의
- 6. 스몰 토크 클래스의 인스턴스 변수 재정의
- 7. 외부 라이브러리에서 파이썬 인스턴스 메서드 재정의
- 8. 가상 메서드를 사용하여 메서드 서명 재정의
- 9. 재정의 C++
- 10. C++ 재정의
- 11. C++ 기본 클래스가 자식 클래스의 재정의 된 메서드를 사용하도록 설정합니다.
- 12. C++의 파생 클래스에서 메서드를 재정의 (숨김)하는 방법은 무엇입니까?
- 13. 생성자에서 재정의 된 메서드를 사용하는 대신
- 14. 메인에서 인스턴스 메서드를 실행하는 방법
- 15. PHP에서 상속없는 인스턴스 메소드를 재정의 하시겠습니까?
- 16. 하위 유형의 인스턴스 변수 "재정의": 가능한 위험?
- 17. Model.objects.all() 메서드를 재정의 할 수 있습니까?
- 18. android CalendarView 메서드를 재정의 할 수 있습니까?
- 19. 클래스의 인스턴스에 대한 메서드를 재정의 하시겠습니까?
- 20. LocationListener 클래스의 메서드를 재정의 할 수 없습니다.
- 21. 다른 kext로 정의 된 메서드를 재정의 하시겠습니까?
- 22. startElement 메서드를 재정의 할 수 없습니다.
- 23. UIScrollView의 "hitTest"메서드를 재정의 할 수 없습니다.
- 24. 속성의 메서드를 재정의 할 수 있습니까?
- 25. 범주 메서드를 재정의 할 수 있습니까? IOS
- 26. Mono.Cecil을 사용하여 재정의 메서드를 만드는 방법?
- 27. 렌더링 메서드를 재정의 할 때의 문제
- 28. XAML UserControl 내의 요소의 메서드를 재정의 하시겠습니까?
- 29. 메서드를 람다 함수로 재정의 할 수 있습니까?
- 30. 우리가 메서드를 재정의 할 때 예외가 무엇입니까
당신은 _instance_의 메소드를 오버라이드 (override)하지 않는, 당신이 _class_의 메소드를 오버라이드 (override),
편집, 그냥 갈 첫 번째 대답을 보았다. 메서드를 재정의해야하는 경우 재정의 된 메서드로 자식 클래스를 정의하고 해당 자식 클래스의 인스턴스를 만듭니다. –
아마도 오버라이드가 OP의 단어 중에서 가장 좋은 단어는 아니지만 그들이하고 싶은 것은 유효한 아이디어입니다. 기본적으로 런타임시 기능을 변경할 수 있기를 원합니다. @JustinNiessner가 말했듯이이 기능을 사용하면 매우 유용합니다. 대의원. –