ホームページ  >  記事  >  バックエンド開発  >  SUNWEN チュートリアル - C# 上級 (6)

SUNWEN チュートリアル - C# 上級 (6)

黄舟
黄舟オリジナル
2016-12-19 10:21:39998ブラウズ

ここで私が話したいのは、C# でのバージョン処理です。実際、これはどのソフトウェアでも考慮する必要がある問題です (私が書いたものを除く)。そのため、バージョン処理は非常に重要です。 Java はこの問題をうまく処理しており、個人的には C# は JAVA の処理方法から学んでおり、良い仕事をしていると思います

C# では、メソッドを宣言するときに virtual キーワードを使用すると、派生クラスの場合、親クラスで virtual キーワードを使用するが、その派生クラスで override または new キーワードを使用しない場合、および を直接参照する場合は、override または new キーワードを使用して非推奨にするか無視できます。同じ名前のメソッドを使用した場合、コンパイラはエラーを報告し、派生クラスのメソッドを無視する新しいモードで実行します。次の例は理解に役立ちます:


000: // Versioningversioning .cs
001: public class MyBase
002: {
003: パブリック仮想文字列 Meth1()
004: {
005: return "MyBase-Meth1";
006: }
007: パブリック仮想文字列 Meth2()
008 : {
009: return "MyBase" -Meth2";
010: }
011: パブリック仮想文字列 Meth3()
012: {
013: return "MyBase-Meth3";
014: }
015: }
016:
017: クラス MyDerived : MyBase
018: {
019: public override string Meth1()
020: {
021: return "MyDerived-Meth1";
022: }
023: public new string Meth2()
024: {
025: return "MyDerived- Meth2";
026: }
027: public string Meth3() // システムはここで警告を出し、メソッド Meth3() は非表示になります
028:
029:
030 : {
031: return "MyDerived- Meth3";
032: }
033:
034: public static void Main()
035: {
036: MyDerived mD = new MyDerived();
037: MyBase mB = ( MyBase) mD;
038:
039 : System.Console.WriteLine(mB.Meth1());
040: System.Console.WriteLine(mB.Meth2());
041: System.Console.WriteLine(mB.Meth3());
042: }
043: }

出力:

MyDerived-Meth1
MyBase-Meth2
MyBase-Meth3
最後の 2 つの新しいキーワードの出力が親クラスにあることが明確にわかります。メソッドの出力なので、 new キーワードの機能は、以前のバージョンにこのメソッドが存在する場合、現在のメソッドの内容の代わりに以前のメソッドが使用されるということです。その機能は、存在する場合には逆の効果を持ちます。は親クラスにそのようなメソッドがあるので、今書いたメソッドの内容を使用し、前のメソッドを削除します。 ただし、ここで new を使用するのはあまり良くないようです。これは誤解を招きます (ああ、Gaidi はそうする予定です)もう一度戦ってください) Me!&*%$#@)。

037 行を削除し、039-041 のすべての mB を mD に変更すると、出力は次のようになります:

MyDerived-Meth1
MyDerived-Meth2
MyDerived- Meth3

これはどういう意味ですか? オーバーライドと新しいキーワードは、派生クラスのオブジェクトが親クラスによって再形成された場合にのみ有効になるという意味です。このメカニズム、いわゆる「実践が C# をテストするための唯一の基準」です。笑

C# では、次のように、派生クラスにメソッドを追加したり、親クラスのメソッドをオーバーライドしたりできます。以下は非常に単純です:

class Base {}
class Derived: Base
{
public void F() {}
}
および:

class Base
{
public void F() {}
}
class Derived : Base
{
public void F() {}
}

上記は SUNWEN チュートリアル - C# 上級 (6) の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) を参照してください。 )!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。