「非表示にするつもりだった場合は新しいキーワードを使用する」警告


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

クラスには基本クラスがあり、この基本クラスには、クラスによってオーバーライドされているイベントと呼ばれるプロパティ(仮想でも抽象でもない)もあります。これを上書きする場合は、public修飾子の後に「new」キーワードを置きます。例えば

public new EventsDataTable Events
{
  ..
}

上書きしたくない場合は、プロパティ名を別の名前に変更してください。


23
newとoverrideの違いを知りたい人のためのリンクがあります。
starsplusplus

new キーワードは、コンパイルエラーを取り除くだろうが、他の予期しない動作を導入することができます。私はあなたの答えに警告を追加するべきだと思います。これは、を追加した結果を理解するのに役立ちますnew
ahong

13

@wdavoは正しいです。関数についても同様です。

Updateなどの基本関数をオーバーライドする場合、サブクラスで次のものが必要です。

new void Update()
{
  //do stufff
}

関数declerationの開始時にnewがなければ、警告フラグが表示されます。


6

以下のコードではClass A、インターフェースIShowを実装し、そのメソッドを実装していますShowDataClass 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 2017

あなたの例は正しい方向に進んでいると思いますが、不完全です。また、あなたの説明は不明確です。回答をdotnetfiddle.net/Iw0OzBのように編集していただけませんか?そうでない場合は、おそらく別の答えとして私のフィドルを投稿します
ahong

0

親関数にはvirtualキーワードが必要であり、子関数overrideには関数定義の前にキーワードが必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.