私は明確にする必要があること。継承を使用する場合、私は仮想またはオーバーライドキーワードを使用せずにメソッドをオーバーライドできます。私のプログラムも実行され、正しい出力が得られます。それでは、私たちに継承があるのに、なぜオーバーライドコンセプトを持っているのですか?それはどう違うの?これは、この導出され継承とオーバーライド。 C#の違いは?
答えて
関数のオーバーライドベース
されている
:
static void Main(string[] args)
{
InheritanceDemo a = new A1();
A1 b = new A1();
a.Mymeth();
b.Mymeth();
}
出力:ここ
は私のコード
class InheritanceDemo
{
public void Mymeth()
{
Console.WriteLine("this is base");
}
}
class A1 : InheritanceDemo
{
public void Mymeth()
{
Console.WriteLine("this is derived");
}
}
主な方法であり、派生クラス関数が基本クラス関数より多くの、または異なるジョブを実行する必要がある場合に必要です。
問題が大きい大規模なアプリケーションでは、これらの概念は重要になります。まず、抽象クラスを作成します(これは直接的な実装ではなく、物事の考え方を示しています)。これらの抽象クラスには、グループのメンバーが実装しなければならない仮想メソッド(メンバー関数)が含まれます(仮想メソッドを派生クラスで定義する必要があるため)。 私はあなたが私の意見を持っていると思う... :)
ありがとうございました!はい、それを得ました:) – javababy
なぜ出力が「正しい」と思いますか?継承を使用すると、正しいを継承して関数を呼び出し、ではなくを基本クラスのメソッドとしたいとします。そしてそれはあなたがvirtual/overrideで定義するものです。
はい私はそれを得ました。ありがとうございました! – javababy
これをコンパイルすると、警告が表示されます。CS0108
警告を無視しないでください。実際に、コンパイルを警告するのではなくエラーに設定できる場合は、警告は、一般的に、悪いことや不明瞭なことをしたことを示す印です。彼らはエラーではありません。なぜなら、最初の見た目が悪いか不明瞭なものを行う良い理由があるかもしれないからです。しかし、上書きするのではなく隠す場合には、new
があります。
ここにあるものはオーバーライドではありませんが、期待しているように、一般的にはオーバーライドが望ましいでしょう。これは、このコードがコンパイラの警告を生成する理由の一部です。
私のプログラムも実行していて、正しい出力を与える
多分それは正しいのですが、あなたはオーバーライドを期待あれば、それは正しくありません。オーバーライドしている場合は、両方から出力される必要があります。
正しい場合は、一般的に上書きが予想されるため、デザインが悪いです。 A1.Mymeth
を「public new void Mymeth()
」と定義するように変更すると警告を止めることができます。これは「本当に間違っていることを意味する」というフラグを立てる方法ですが、自分自身を説明する必要がある場合は、それは悪い兆候です。非表示の方法は、一般的にあなたのもとで基底クラスを変更している人があなたの手を強要したときにのみ行われます。何らかの相互運用性のために名前を一致させる必要があります。
ありがとうございました。私はちょっとばかだった。私は今ポイントがある! – javababy
- 1. オーバーライドと継承
- 2. C#の継承とオーバーライド塩基特性
- 3. Python継承とメソッドのオーバーライド
- 4. 古典継承とプロトタイプ継承の違いを理解する
- 5. Java継承とオーバーライドのコンセプトの難問
- 6. Javaの継承とメソッドのオーバーライド
- 7. 同期メソッドの継承とオーバーライド
- 8. 静的メソッド継承と静的変数継承の違いは何ですか?
- 9. C++テンプレートクラスと継承
- 10. の継承は、C#
- 11. オーバーライド継承されたフィールドは
- 12. C#で継承されたクラスプロパティをオーバーライドする方法は?
- 13. C++の継承
- 14. C++の継承
- 15. 継承 - ターゲット固有の継承クラスC#
- 16. クラス継承とインターフェイス継承
- 17. C++クラスの継承とテンプレート
- 18. C#のリフレクションと継承
- 19. C#インターフェイスとクラスの継承
- 20. C++のテンプレートと継承
- 21. C++のデストラクタと継承?
- 22. c#インターフェイスと継承のベストプラクティス
- 23. C++での継承とポインタ
- 24. C++のコンセプトチェックと継承
- 25. オーバーライドされた要素のCSS継承
- 26. 継承された動作のオーバーライド
- 27. 継承とカテゴリの相違点
- 28. C++多重継承/仮想継承
- 29. C++エコシステムシミュレータ(継承)
- 30. マルチレベル継承C++
'a'(' InheritanceDemo b = new A1(); ')の代わりに' b'を 'InheritanceDemo'と宣言してください。 – Dmitry