ホームページ  >  記事  >  バックエンド開発  >  C#の基礎知識編:C#のクラスと構造体(1)

C#の基礎知識編:C#のクラスと構造体(1)

黄舟
黄舟オリジナル
2017-02-10 15:13:531405ブラウズ

1. 構造的および機能的特徴? コードを実装しますか?
構造体は struct キーワードを使用して定義されます。これはクラスと似ていますが、本質的な違いがあります。この構造体は本質的に値型であり、割り当ては必要ありません。
構造体の特徴:
(1) 構造体をパラメータとして渡す場合、値渡しとなります。
(2). 構造体のコンストラクターはパラメーターを受け取る必要があります。
(3). 構造体のインスタンス化には new は必要ありません。
(4). 構造は継承できませんが、インターフェースは実装できます。
(5). 構造体ではインスタンスフィールドを初期化できません。
例:

using System;
using System.Collections.Generic;
using System.Text;

namespace TestStruct
{
    class Program
    {
        public struct Circle     //定义一个圆
        {
            private const double pi = 3.1415926;

            public double radius;  //半径

            /// <summary>
            /// 构造函数
            /// </summary>
            public Circle(double r)
            {
                radius = r;
            }
            /// <summary>
            /// 面积
            /// </summary>
            public double CArea()
            {
                return 3.14 * radius * radius;
            }

        }

        static void Main(string[] args)
        {
            Circle circle1;    //不用new实例化

            circle1.radius = 5;

            Console.WriteLine("圆面积为:" + circle1.CArea());

            Circle circle2 = new Circle(1);  //用new实例化

            Console.WriteLine("圆面积为:" + circle2.CArea());

            Console.ReadLine();
        }
    }
}

2. 委任とは何ですか? 特徴? インターフェイスの代わりにデリゲートを使用するのはどのような場合ですか? デリゲートを宣言、インスタンス化、使用するにはどうすればよいですか?

(1). デリゲートはメソッドの型を定義するクラスであり、メソッドは別のメソッドのパラメーターとして使用できます。プログラム内で分岐を使用しないでください。

プログラムはよりスケーラブルになります。
例:

  class Program
    {
        public delegate void PrinteDelegate(string name);

        private static void PrinteEnglish(string name)
        {
            Console.WriteLine("Your Name: " + name);
        }

        private static void PrinteChinese(string name)
        {
            Console.WriteLine("你的大名: " + name);
        }

        private static void Printe(string name, PrinteDelegate MakeGreeting)
        {
            MakeGreeting(name);
        }

        static void Main(string[] args)
        {
            Printe("Sam Young", PrinteEnglish);

            Printe("白杨树", PrinteChinese);

            Console.ReadLine();
        }
    }

(2)、デリゲートは C++ 関数ポインターに似ていますが、タイプセーフです。

デリゲートを使用すると、メソッドをパラメータとして渡すことができます。

デリゲートを使用してコールバック メソッドを定義できます。

デリゲートは連鎖させることができます。たとえば、1 つのイベントで複数のメソッドを呼び出すことができます。

メソッドはデリゲートの署名と正確に一致する必要はありません。詳細については、共分散と反分散を参照してください。

C# バージョン 2.0 では、個別に定義されたメソッドの代わりにコードのブロックを引数として渡すことができる匿名メソッドの概念が導入されました。

デリゲートを使用します。異なるメソッドを呼び出すために分岐する必要がある場合に使用する必要があると思います。ただし、たとえば、ファクトリ パターンでは、ブランチに応じて異なるクラスがインスタンス化されます。この場合、インターフェイスが使用されます。

デリゲートはメソッドの型を定義するクラスであり、メソッドを別のメソッドのパラメータとして渡すことができるため、メソッドをパラメータに動的に割り当てるこの方法により、プログラム内での問題を回避できます。 If-Else (Switch) ステートメントを使用すると、プログラムのスケーラビリティも高まります


3. 部分カテゴリ/サブカテゴリとは何ですか? どのような特徴がありますか? コードを実装しますか? アプリケーション? 従う必要のあるルールはいくつありますか?

部分クラスは、partial キーワードを使用してクラスを複数の独立したファイルに分割しますが、本質的には 1 つのクラスです。一般に、クラスの行が多すぎる場合、または一部の関数が比較的独立している場合、最も一般的なクラスは Form.cs と Form.designer.cs です。

一般に、次のルールに従う必要があります:

(1)、部分キーワードを使用する必要があります


(2)、異なる部分がありますが、各部分はパブリック、プライベートなど、同じアクセシビリティを持つ必要があります。

(3) 、いずれかの部分が抽象およびシールとして宣言されている場合、型全体は抽象およびシールされているとみなされます

(4) いずれかの部分が基本クラスを継承するように宣言されている場合、型全体がクラスを継承します

( 5) 各パーツは異なる基本インターフェイスを指定でき、最終的な型はすべてのパーツ宣言にリストされているすべてのインターフェイスを実装します

(6)。特定のパーツ定義で宣言されたクラス、構造体、またはインターフェイス メンバーは、他のすべてのパーツで使用できます。

(7) 入れ子になっている型自体が部分的でなくても、入れ子になった型は部分的になる可能性があります。

上記は C# の基礎知識をまとめたものです: C# のクラスと構造体 (1) 関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。

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