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

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

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

皆さんこんにちは、私は武漢中国師範大学のSUNWENです。笑、午後にやっと外に出て遊ぶ時間ができました。チケットは10元で、それほど高くはありませんでした。すぐにご覧いただけます

早速、今回説明したいのは、C# の属性です。私は男性であり、男性は私の属性です。私は新入生です。属性はオブジェクトのプロパティです。以下に 2 つの例を示します。例は、変更可能な属性を宣言する方法を示しています。別の例では、抽象プロパティ (Abstract) を作成し、それをサブクラスで破棄する方法を示しています。

例 1:


000: // PROpertiesperson .cs
001 : using System;
002: class Person
003: {
004: private string myName ="N/A";
005: private int myAge = 0;
006:
007: // キャラクターを宣言属性名
008: 公開文字列 Name
009: {
010: get
011: {
012: return myName;
013: }
014: set
015: {
016: myName = 値; 018: }
019:
020: // int 型の Age プロパティを宣言します
021: public int Age
022: {
023: get
024: {
025: return myAge
026: }
027: set;
028 : {
029: myAge = 値;
030: }
031: }
032:
033: パブリックオーバーライド文字列 ToString()
034: {
035: return "Name = " + Name + ", Age = " + Age;
036: }
037:
038: public static void Main()
039: {
040: Console.WriteLine("Simple Properties");
041:
042: // Person インスタンスを作成します
043 : 人物 person = new Person();
044:
045: //属性を出力します
046: Console.WriteLine("人物詳細 - {0}", person);
047:
048: // 右プロパティの設定を行います
049: person.Name = "Joe";
050: person.Age = 99;
051: Console.WriteLine("個人詳細 - {0}", person);
052:
053 : / / 年齢を追加します
054: person.Age += 1;
055: Console.WriteLine("個人の詳細 - {0}", person);
056: }
057: }
この例の出力は次のとおりです。

単純なプロパティ

人物の詳細 - 名前 = N/A、年齢 = 0

人物の詳細 - 名前 = Joe、年齢 = 99
人物の詳細 - 名前 = Joe、年齢 = 100

さて、また起きて書きました。昨日は、走って寝てしまいました、笑 今日は何記事書けるか見てみましょう

上記のプログラムから、その設定がわかります。 VB の概念を借用したクラスの属性の表現は、Java とは異なります (これは M$、TMD です!) 一部の友人は、なぜ Console.WriteLine() を使用してオブジェクト person を出力できるのか疑問に思っているかもしれません。これは理にかなっています。JAVA と同様に、レギュレータが print メソッドを使用すると、オブジェクトは自動的に ToString() (JAVA、TMD の toString、これもほぼ間違いです!) メソッドを呼び出します。33 行目に、次のメソッドがあります。このメソッドのシャドウ。override キーワードはおそらく親クラスをオーバーライドするメソッドです。これは、オブジェクトの属性の設定が get() と set() の組み合わせによって完了することがわかります。もちろん、value と呼ばれるものもあります。たとえば、属性を書き込みたくない場合は、単に get() と set() を削除するだけで、属性の読み取り/書き込み権限を制御することもできます。 、ただ set() しないでください。読みたくない場合は get() しないでください。この点では C# は JAVA ほど柔軟ではないといつも感じています (もう終わりです。

2 番目の例:

この例は、抽象属性 (Abstract) を作成する方法を示しています。 いわゆる抽象属性とは何ですか? (ああ、毎回意味のないことがたくさんあります)。 ! FT) 抽象クラスは実行属性アクセス プロシージャを提供しないため、次の例には 3 つのファイルがあり、結果を取得する必要があります。

abstractshape.cs: Shapeクラス、Area 抽象プロパティが含まれています。

shapes.cs: Shape のサブクラス

shapetest.cs: 表示プログラム
これらのプログラムをコンパイルするには、次のコマンドを実行します。 実行後、実行可能プログラムshapetest.exe.

000: // Propertiesabstractshape.cs
001: System を使用します;
002:
003: パブリック抽象クラス Shape
004: {
005: private string myId;
006:
007: public Shape(string s)
008: {
009: Id = s; // この文は Id 属性の set ビルダーを呼び出します
010: }
011:
012: public string Id
013: {
014: get
015: {
016: return myId ;
017: }
018:
019: set
020: {
021: myId = value;
022: }
023: }
024:
025: public abstract double Area
026: {
027: get;
028: }
029:
030: パブリックオーバーライド文字列 ToString()
031: {
032: return Id + " Area = " + double.Format(Area, "F");
033: }
034: }
このプログラムを見ると、実際には、このクラスペアのオブジェクトを作成するときに、初期化部分が 007-010 であり、そのオブジェクトのパラメーター s を Id 属性に与えます。実際、抽象属性を Java のインターフェイスと比較できます。これらはメソッドの名前のみを示しますが、このメソッドの内容は提供しません。Area と同様に、get はありますが、それはありません。 get メソッドの内容 (メソッドとは言えないかもしれません) は指定されていません。つまり、get によって行われる処理はそのサブクラスによって行われます。このファイルでは、クラスがオーバーライドされます。 Area プロパティをオーバーライドします。

000: // Propertiesshapes.cs

001: public class Square : Shape

002: {
003: private int mySide;
004:
005: public Square(int side, string id ) :base (id)
006: {
007: mySide = サイド;
008: }
009:
010: public override double Area
011: {
012: get
013: {
014: return mySide * mySide ;
015 : }
016: }
017: }
018:
019: public クラス Circle : Shape
020: {
021: private int myRadius;
022:
023: public Circle(int radius, string id) :base( id)
024: {
025: myRadius = radius;
026: }
027:
028: public override double Area
029: {
030: get
031: {
032: return myRadius * myRadius * System.Math .PI;
033: }
034: }
035: }
036:
037: public class Rectangle : Shape
038: {
039: private int myWidth;
040: private int myHeight;
041:
042: public Rectangle(int width, int height, string id) :base(id)
043: {
044: myWidth = width;
045: myHeight = height;
046: }
047:
048: public override double Area
049: {
050: get
051: {
052: return myWidth * myHeight;
053: }
054: }
055: }
この例では、何をするのか少し混乱します。継承、JAVA の extends に相当すると思います。まず見てみましょう。

000: // Propertiesshapetest.cs

001: public class TestClass

002: {

003: public static void Main()

004: {
005: Shape[] シェイプ =
006: {
007: new Square(5, "Square #1"),
008: new Circle(3, "Circle #1"),
009: new Rectangle(4, 5, "Rectangle #1")
010: };
011:
012: System .Console.WriteLine("Shapes Collection");
013: foreach(Shape s in Shapes)
014: {
015: System.Console.WriteLine(s);
016: }
017:
018: }
019 : }
この例から、 : 記号は次のことを行います。継承とは何を意味しますか? 端的に言うと、次の文では、sunwenson extends sunwen という名前は、sunwen に加えて、sunwenson クラスが継承することを意味します。これは単純ですが、ソフトウェアの再利用性を大幅に向上させることができるため、最新のソフトウェア開発において重要なテクノロジです。 . 残念ながら、これを言えるのは後輩と先輩だけなので、私には資格がありません (笑)

このプログラムの出力は次のとおりです:

Square #1 Area = 25.00

Circle #1 Area = 28.27

Rectangle # 1 エリア = 20.00

以上で、このセクションは終わりです。特に JAVA や C++ プログラミングの経験がない人にとっては、このセクションを理解するのは少し難しいです。しかし、恐れることなく、学ぶ勇気を持ってください。何かを学んだので、休まなければなりません。


上記は SUNWEN チュートリアル - C# 上級 (4) の内容です。 、PHP 中国語 Web サイト (www.php.cn) に注意してください。


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