1. ホーム
  2. c#

[解決済み] C#で、クラスや関数の前に角括弧で書かれているものは何でしょうか?重複] [重複] [重複] [重複

2022-02-07 13:44:49

質問

私はCとC++に精通しています。C#を使うのは初めてです。私はWCFとWPFについて学習しようとしています。私はCodeProjectのチュートリアルを使用しています。そこでは、作者がサンプルコードを与えています。そこで彼は、角括弧内のインターフェイスとメソッドの前に何かを書いています。それは何ですか?コメントなのでしょうか? 以下は、そのサンプルコードです。

[ServiceContract(SessionMode = SessionMode.Required, 
    CallbackContract = typeof(IChatCallback))]
interface IChat
{
    [OperationContract(IsOneWay = true, IsInitiating = false, 
        IsTerminating = false)]
    void Say(string msg);

    [OperationContract(IsOneWay = true, IsInitiating = false, 
        IsTerminating = false)]
    void Whisper(string to, string msg);

    [OperationContract(IsOneWay = false, IsInitiating = true, 
        IsTerminating = false)]
    Person[] Join(Person name);

    [OperationContract(IsOneWay = true, IsInitiating = false, 
        IsTerminating = true)]
    void Leave();
}

解決方法は?

これらは属性です。 以下の通りです。 属性 は宣言タグで、プログラム中のクラス、メソッド、構造体、列挙体、アセンブリなどの様々な要素の動作に関する情報を実行時に伝えるために使用されます。属性を使って、プログラムに宣言的な情報を追加することができます。宣言的なタグは、使用する要素の上に角括弧([ ])で囲んで表現します。
例えば、属性は以下のように使用することができます。 クラスがシリアライズ可能かどうか または データベースのどのフィールドに、特定のプロパティを書き込むか。 などなど...。

例えば、こんな属性を見てみましょう。

 [OperationContract(IsOneWay = true, IsInitiating = false, IsTerminating = false)]

この属性は OperationContract . そして IsOneWay , IsInitiating , IsTerminating は、この属性のプロパティです。

オペレーションコントラクト - あるメソッドが、以下の操作を定義していることを示す。 Windows Communication Foundation のサービス・コントラクトの一部です。 (WCF)アプリケーションで使用されます。
IsOneWay - を示す値を取得または設定する。 操作によって返信メッセージが返されるかどうか。
IsInitiating - 取得または メソッドが操作を実装しているかどうかを示す値を設定します。 サーバー上でセッションを開始することができます (そのようなセッションが存在する場合)。
IsTerminating - を示す値を取得または設定します。 サービス操作の後、サーバーはセッションを終了させます。 応答メッセージがある場合は、それを送信する。

定義済みの属性を使用するか、独自のカスタム属性を作成することができます。

すべての定義済み属性とその説明を見ることができます。 こちら .
を読むことができます。 これ msdnによるAttributeについてのチュートリアル。