2013-07-09 4 views
17

私はthis introduction to Polyphonic C#を読んでいると、最初のページには、この例が含まれていますポリフォニックC#メソッドをアンパサンドで区切っていますか?

例:ここでは簡単なバッファ

はポリフォニックC#クラスの最も単純な興味深い例である:

public class Buffer { 
    public String get() & public async put(String s) { 
     return s;  
    } 
} 

私はそれをまったく手に入れません。
方法get()put()&は何を意味するのでしょうか?

+1

@Amy:OPは両方の言語を混在させていると思います。だから私はそれが誤解を招く場合でも、C#タグを保持します。ちょうどこの質問がこの誤解を解決できるからです。 –

+0

@TimSchmelter合意した、私は通常のC#と読んで、私の混乱は、より良いC#タグを維持する –

答えて

6

これは合法ではありません。C#。それはポリフォニックC#です。それはresearch project from Microsoftです。それが正確定義されていない残念だが、ポイントはこれです:

ポリフォニックC#の

は、しかしながら、身体は(同期および/または非同期)メソッドのセットに関連付けることができます。このような定義をコードと呼び、特定の方法が複数のコードのヘッダーに表示されることがあります。コードの本体は、ヘッダ内のすべてのメソッドが呼び出された後にのみ実行できます。

従って&はこれらのメソッドをまとめてコードに組み込み、コードのすべてのメソッドが呼び出されるまで呼び出されません。

同じarticleに沿って少しさらに:

これらの2つの方法は、returnステートメントから成る本体れた単一コードのヘッダに(アンパサンドで区切られた)に表示されます。 今bBufferのインスタンスであり、そのプロデューサとコンシューマスレッドがbを介して通信することを望むと仮定する。プロデューサはput()を呼び出します。このメソッドは非同期なのでブロックしません。コンシューマはget()を呼び出します。このメソッドは同期的なので、put()の呼び出しが一致するまでブロックされます。 bput()get()の両方を受信すると、本文が実行され、get()を呼び出した結果、put()への引数が返されます。 put()は、それらのいずれかを目覚めために受信され、それらの引数がその後のget() Sによって消費される前に、put()に複数の呼び出しを行うことができる前に、get()から複数のコールが保留されてもよいです。

:しかし、そのような刃先の性質です。私はそれを得る。

0

それは単に和音を構成する複数の方法を指定するための構文です。本文は、ヘッダー内のすべてのメソッドが呼び出されるまで実行されません。

+0

したがって、ポリフォニックC#は、通常のC#ではなく、特定ですか? –

+3

これは正しいです、これは合法的なC#構文ではありません –

+0

はい、これはポリフォニック固有のものです。 – ClosedEyesSeeing

関連する問題