2012-03-13 9 views
2

私は静的なクラスを持っています。クライアントにインスタンス変数を使用させるために、クラスを非推奨および修正しています。インスタンスを静的に処理するには、どうすれば適切に処理できますか?

質問:以前の静的クラスを残して使用する(古い属性で)ことを許可し、新しい静的でないクラス(同じ名前、同じメソッド名)も使用できるようにするにはどうすればよいですか?

これは可能ですか?

+1

あなたは別のネームスペースを使用できますか? –

+0

私はこれがうんざりだと知っていますが、私は同じままにしておきたいと思います。私が求めていることは、可能ではない可能性があります。それは電話するときにそれが違いを伝えることができない迷惑なことです。 – dbobrowski

答えて

2

そこに使用できるいくつかの方法がありますが、どれも、あなたが望むものを正確にしません:

  1. は実装し、それは部分的に作り、必要に応じて、通常の非静的クラス作り、static修飾子を削除し、新しいインスタンス関連のコードを2番目のファイルに追加します。ただし、この方法では、クラスが1つしかないので、静的クラス全体を廃止することはできません。
  2. 新しい名前空間
  3. 場所に置き、新しいクラスを新しいプロジェクトに新しいクラスがありますが、すべての古い静的メンバーが時代遅れにする場合は、元の

と同じ名前空間には、私は行くだろうオプションnbrの場合。 1.

+0

オプション#1は私が最初に実装したものですが、メソッド名は同じですので、クライアントは以前の静的な(今や部分的な)クラスの静的メソッドのみを参照するので、新しい機能が隠されます。 – dbobrowski

1

私は同じ名前とパラメータを保つことが可能になるとは思わないが、あなたがこの

[Obsolete("This class is obsolete; use class B instead")] 

Visual Studioは、彼らが新しいクラスを使用する必要があることを、ユーザーへのヒントになる行うことができます。

+0

私はこれを行う予定でした – dbobrowski

0

同じクラス名と同じメンバーでは、タイプがあいまいです。これは、不要な属性のメッセージフィールドを使用して頻繁に行われます。代わりに、使用するクラス(この場合は新しいインスタンスクラス)を呼び出し側に通知します。

おそらく、電話をかけた人には不明瞭な最良のケースであっても、彼らが扱っていたバージョンを知る必要があります。呼び出し側はinstaceクラスと静的クラスを別々に扱う必要があるため、それらを隠すことで問題が発生します(そうすることができました)。あなたができる

0

ことの一つは、このように、explicitly implemented interfaceを通じてメソッドの非静的バージョンを実装することです:期待通り

public interface ITest 
{ 
    string Foo(); 
} 

// your class 
public class Test : ITest 
{ 
    //original, static version of Foo 
    public static string Foo() 
    { 
     return "foo"; 
    } 

    // Foo reimplemented as a non-static method 
    // note that you need to implement ITest explicitly 
    // for it to compile 
    string ITest.Foo() 
    { 
     return "foo"; 
    } 
} 

これは、非静的メソッドのみを呼び出すことができることを除いて、コンパイルして動作します

関連する問題