0

いくつかの静的メンバーを持つ「Foo」という名前のクラスがあり、他のクラス (同じ名前空間の下にあります) には、このメンバーを使用する同じ名前のファクトリ メソッドがあるとします。

namespace MyNamespace
{
    public class Foo
    {
        public static bool Invert = false;
        public int A {get; set;}
        ....
    }

    public class FooFactory
    {
        public Foo Foo(int A) 
        {
           if(Foo.Invert) // --> this gives the 'is a 'method', which is not valid in the   given context' Error
              return new Foo(-A);
           else
              return new Foo(A);
        }
    }
}

(簡潔にするために一部のコードは省略されています)。明らかに、コンパイラは 'if' 句の 'Foo' をクラス 'Foo' としてではなく、ファクトリ メソッドとして解釈します。クラスの名前もファクトリ メソッドの名前も自由に変更できないと仮定すると、コンパイラに 'Foo' をメソッド名ではなくクラス名として認識させることはできますか?

EDITこれについて言及しなかったことをお詫びします-両方のクラスが同じ名前空間にあるため、 MyNamespace.Foo.Invert はそのトリックを行いません。

4

2 に答える 2

4

ディレクティブを使用して救助します。クラスのエイリアスを作成するだけです。

using FooClass = Namespace.Foo;

クリック音

于 2012-01-31T13:59:07.833 に答える
2

MyNamespace.FooFactory.Foo実際に試みているのは、クラスであるかのようにメソッドにアクセスすることであるため、コードは機能しません。指定するMyNamespace.Foo場合は、意図したクラスを指定します。

namespace MyNamespace 
{ 
    public class Foo 
    { 
        public static bool Invert = false; 
        public int A {get; set;} 
        .... 
    } 

    public class FooFactory 
    { 
        public Foo Foo(int A)  
        { 
           if(MyNamespace.Foo.Invert)
              return new MyNamespace.Foo(-A); 
           else 
              return new MyNamespace.Foo(A); 
        } 
    } 
} 

これは機能します。

あなたの編集に関しては、同じではMyNamespace.FooFactory.FooありMyNamespace.Fooません。

于 2012-01-31T14:53:40.060 に答える