2012-09-15 3 views
2

기본 클래스에서 설명한 메서드와 이름이 같은 파생 클래스에서 메서드를 정의하면이 오류를 읽어야합니다. : ""override "또는"new "키워드"을 추가하십시오. 그러나 아래의 코드를 통해이 작업을 수행하려고 노력하고 있음에도 불구하고 모든 것이 정상인 것 같습니다."override"/ "new"없이 오류를 일으키지 않고 재정의

이유를 알고 싶습니다. Visual Studio 2010을 사용합니다.

class Base 
{ 
    public void Method() 
    { 
    Console.WriteLine("Base class"); 
    } 
} 

class Child : Base 
{ 
    public void Method() 
    { 
    Console.WriteLine("Child class"); 
    } 
} 

static void Main(string[] args) 
{ 
    Base myBase = new Base(); 
    Child myChild = new Child(); 
    myBase.Method(); 
    myChild.Method(); 
} 

출력은 다음과 같습니다.

Base class

Child class

답변

1

오류가 발생하지 않으며 컴파일 시간 경고가 표시됩니다.

Here is the MSDN documentation that explains it all.

+0

감사합니다. 그렇기 때문에 "새로운"키워드는 항상 선택 사항입니까? –

+0

@AlekseiChepovoi, 음, 경고가 있기 때문에 글쎄, 그건 선택 사항이 아니에요. 경고는 절대 무시해서는 안됩니다. 그들은 고정되거나 억제되어야합니다 (귀하의 경우 경고가 적용되지 않는다는 것을 알고있는 경우). 이 경우 수정이 쉽습니다 ... –

1

두 가지 방법이 동일합니다. 어떤 메소드가 컴파일 타임에 바인드되는지는 컴파일러가 주어진 컨텍스트에서 보는 타입에 달려 있습니다.

컴파일 타임 또는 런타임 오류가 발생하면 라이브러리 개발자는 공유 기본 클래스에 새 메서드를 추가하기 만하면 코드 소비가 중단 될 수 있습니다.

1

그것은 경고입니다, 오류가 아닙니다.

참조 CS0108는 : 오류로 취급하려면 http://msdn.microsoft.com/en-us/library/3s8070fc.aspx

, 당신은 탭을 구축, 프로젝트의 속성으로 이동 오류로 경고를 취급하고 상자에 108을 넣는 동안 특정 경고를 확인할 수 있습니다.

관련 문제