2013-03-14 2 views
5

virtualsealed 키워드의 정의를 알고 있지만 두 가지 방법 중 하나를 사용하지 않으면 기본적으로 재정의 할 수 있습니까?C# 방법은 기본적으로 봉인되어 있습니까?

나는 vb.net 배경에서오고있다. 그것은 (MSDN에서) vb.net에서 다음과 같이 진행됩니다

재정의 또는는 NotOverridable 수정이 지정되지 않은 경우, 기본 설정은 속성 또는 메서드가 기본 클래스의 속성 또는 메서드를 오버라이드 (override) 여부에 따라 달라집니다. 속성 또는 메서드가 기본 클래스 속성이나 메서드를 재정의하는 경우 기본 설정은 재정의 할 수 있습니다. 그렇지 않으면 NotOverridable입니다.

저는 C#에서도 마찬가지인지 알고 싶습니다.

+8

가장 빠른 방법은 자신을 확인하는 것입니다. 체크 할 코드는 약 10 줄을 넘지 않습니다. – Zipper

답변

5

없음이에

토론은 할 수 없습니다. 파생 클래스에서 메서드를 재정의하려면 가상으로 메서드를 명시 적으로 표시해야합니다.

그러나 할 수있는 일은 new 키워드를 사용하여 메소드를 숨기는 것입니다. (MSDN Documentation)

봉인 된 키워드는 클래스 정의 및 메서드에서 사용됩니다. 클래스에서 상속하거나 메서드를 재정의 할 수 없습니다. 기본적으로이 키워드를 사용하지 않으면 다른 사용자가 클래스에서 상속받을 수 있습니다. (MSDN Documentation)

+0

참고'sealed'는 메서드와 클래스에 적용됩니다. 자신의 하위 유형이이를 대체 할 수 없도록 가상 메소드를 봉쇄 할 수 있습니다. – Servy

+0

@Servy 그래서 새로운 것을 배웠습니다. 감사! –

+0

'new' 키워드가 파생 클래스의 메소드에 대해 암시 적이라는 사실을 기본 클래스에 가상 메소드 또는 비 가상 메소드로 추가하는 것을 추가하기 만하면됩니다. 파생 클래스에서 메소드의 선언에'new' 키워드를 명시 적으로 언급하면 ​​프로그래머는 의도 한 메소드가 상속 호출 계층 구조에 참여하는 데 관심이 없다는 것을 알 수 있습니다. – RBT

6

기본적으로 C#의 메소드는 이 아니고 가상입니다.

2

아니요. Java와 달리 C# 메서드는 기본적으로 virtual이 아닙니다. 둘 다 sealed이 아니지만 정상적인 방법이기 때문에 무시할 수 없습니다.

2

아니요, 비 가상 메서드를 재정의 할 수 없습니다. 새 키워드는 기본 클래스 구현 만 숨기고 좋은 연습은 아닙니다. 앤더스 헤 즐스 버그 here

관련 문제