0

暗黙の演算子は静的と呼ばれる必要があることに気付きましたが、実際にはまったく静的ではありません...暗黙の演算子は静的にアクセスできないのに、インスタンスを介してアクセスできるのはなぜですか。これは静的とは正反対です。クラスの静的状態を暗黙的に変換できるように、静的静的暗黙演算子が必要であるとします。

例えば

a = new b(); // implicitly converts b to a.
a = b(); // implicitly convert the static states of b to a.

したがって、たとえば b はフォームを持っているため非静的クラスですが、すべての意図と目的のために静的であり、すべてのインスタンスが同じ情報を共有しているため、クラスの静的内部を暗黙的に変換したいと考えています。

ジェフは意味がないと考えているので、私の例をもっと詳しく説明しようと思います。

class bはダイアログ フォームを表示しますが、入力されたすべての情報を静的変数に保存します。これは、b のインスタンスがダイアログ フォームを表示するためだけのものであり、入力されたデータがデータの 1 つの論理ブロックであるためです (入力されたデータの論理インスタンスは 1 つだけです)。すべての静的変数は に直接適合するため、静的変数を のインスタンスにclass aシームレスに変換できますが、別のメソッドを使用する代わりに、このタスクに暗黙の演算子を使用したいと考えています。しかし、実際の静的暗黙演算子を使用できないことを嘆いています。おそらく、静的という言葉を誤解していて、メソッドやクラスでどのように機能するかという観点からのみ使用しています。ba class

4

4 に答える 4

1

クラスの「静的状態」に対して機能する演算子はありません (おそらく を除くtypeof)。つまり、次のようなことはできません。

var result = System.Int32 + System.Int32;

演算子は、クラスのインスタンスでのみ機能します。

int a = ..., b = ...;
var result = a + b;

すべての演算子は必然的に静的であるため、「通常の静的」演算子と「静的静的」演算子を区別する必要はありません。

シングルトン パターンの使用を検討してください。このようなもの:

public class Foo
{
    public int Member { get; set; }

    private static Foo instance = new Foo();
    public static Foo Instance { get { return instance; } }

    private Foo()
    {
    }

    public static implicit operator int(Foo foo)
    {
        return foo.Member;
    }
}

次に、次のように使用できます。

int a = Foo.Instance;
于 2013-06-13T06:06:21.200 に答える
1

C# では、すべての演算子の定義は静的です。たとえば、 http://msdn.microsoft.com/en-us/library/aa288467( v=vs.71 ).aspx を参照してください。

-もちろん、二項演算子の定義this

-単項演算子の定義。2 項演算子の定義が静的であるというテーマに一致します。

このようにするのは単なる慣習です。

于 2013-06-13T06:06:33.667 に答える