"숨기기가 의도 된 경우 새 키워드 사용"경고


101

화면 하단에 경고가 있습니다.

경고 1 'WindowsFormsApplication2.EventControlDataSet.Events'는 상속 된 멤버 'System.ComponentModel.MarshalByValueComponent.Events'를 숨 깁니다. 은폐가 의도 된 경우 새 키워드를 사용하십시오. C : \ Users \ myComputer \ Desktop \ Event Control \ WindowsFormsApplication2 \ EventControlDataSet.Designer.cs 112 32 eventControl

두 번 클릭하면 다음과 같이 표시됩니다.

public EventsDataTable Events {
    get {
        return this.tableEvents;
    }

누구든지 이것을 제거하는 방법을 말해 줄 수 있습니까?

답변:


144

클래스에는 기본 클래스가 있으며이 기본 클래스에는 클래스에 의해 재정의되는 Events라는 속성 (가상 또는 추상이 아님)도 있습니다. 재정의하려면 public 한정자 뒤에 "new"키워드를 넣으십시오. EG

public new EventsDataTable Events
{
  ..
}

재정의하지 않으려면 속성 이름을 다른 것으로 변경하십시오.


23
다음은 new와 override 의 차이점 을 알고 싶은 사람을위한 링크 입니다.
starsplusplus

new 키워드는 컴파일 오류를 제거 얻을 것이다, 그러나 다른 의도하지 않은 동작을 초래할 수있다. 답변에 경고를 추가해야한다고 생각합니다. 을 추가 한 결과를 이해하는 데 도움이됩니다 new.
ahong

13

@wdavo가 정확합니다. 함수도 마찬가지입니다.

Update와 같은 기본 함수를 재정의하는 경우 하위 클래스에 다음이 필요합니다.

new void Update()
{
  //do stufff
}

함수 선언 시작시 새로운 기능이 없으면 경고 플래그가 표시됩니다.


6

아래 코드 Class A에서 인터페이스 IShow를 구현하고 메서드를 구현합니다 ShowData. Class B상속 Class A합니다. 에서 ShowData메서드 Class B를 사용 하려면 기본 클래스 메서드 를 숨기려면 메서드에 키워드를 사용해야 new하고 ShowData메서드 를 확장 Class A하려면 override키워드를 사용해야 합니다.

interface IShow
{
    protected void ShowData();
}

class A : IShow
{
    protected void ShowData()
    {
        Console.WriteLine("This is Class A");
    }
}

class B : A
{
    protected new void ShowData()
    {
        Console.WriteLine("This is Class B");
    }
}

3
아무 없습니다 override당신의 해설에서 예와 override필요하지 않습니다.
Etienne Faucher

나는 당신의 모범이 올바른 길을 가고 있다고 생각하지만 불완전합니다. 또한 설명이 명확하지 않습니다. 대답을 dotnetfiddle.net/Iw0OzB 와 더 비슷하게 편집 할 수 있습니까? 그렇지 않다면 아마 다른 답변으로 내 바이올린을 게시 할 것입니다
ahong

0

부모 함수에는 virtual키워드 가 필요하고 자식 함수 override에는 함수 정의 앞에 키워드가 필요합니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.