1

だから私は列挙型MyEnumを含むクラスClassAと、そのクラス(異なるプロジェクト)を参照するクラスClassBを持っているので、ClassBには

using ClassA;

句と私は次のようなものを使用してその列挙型にアクセスできます

MyEnum value = MyEnum.EnumValue;

3 番目のプロジェクトでは、Windows フォームがあり、次のような句があります。

using ClassB;

Windowsフォームでその列挙型にアクセスするには、ClassBに何を追加できますか? それは可能ですか?列挙型にアクセスするためだけに ClassA をフォームに追加する必要はありません。

ClassB は、私のフォームと ClassA の機能の間のマネージャーのようなものですが、多くのタスクが簡単になるため、その列挙型にアクセスしたいと考えています。

4

4 に答える 4

4

この状況での論理的なことは、列挙型を独立さClassAせて公開し、ソリューション全体で利用できるようにすることです。

編集

コメントを読んだ後、本当に変更を避けたい場合はClassA、2 番目の列挙型を作成して、1 つの値を別の値にキャストすることができます。たとえば、拡張メソッドでは次のようになります。

public enum EnumB
{
    // make it equivalent to enum in ClassA
}

public static EnumB ToEnumB(this EnumA enumAValue) 
{
    EnumB newValue = (EnumB)(int)enumAValue;
}
于 2012-04-13T10:50:36.317 に答える
2

列挙型にアクセスするためだけに ClassA をフォームに追加する必要がないようにしたい

できません。が存在するアセンブリで定義されている場合は、そのアセンブリを参照する必要があります。ClassA

異なるアセンブリに存在するクラスについて話しているのでない場合は、列挙を独自のファイルに入れ、次のように宣言publicできます。これにより、コードの任意の場所からアクセスできます (これは列挙の通常の方法です)。


アップデート:

パブリック列挙体やインターフェイスなどの共有オブジェクトを含む追加のプロジェクトを作成し、他のプロジェクトでそれを参照できます。

于 2012-04-13T10:50:48.457 に答える
1

Using句は、そこで定義された要素を参照する必要があるたびに名前空間 (またはこの場合はクラス) を記述することを避けるための単なるショートカットです。

書くのが嫌なら

ClassA.MyEnum..

あなたは書く必要があります

using ClassA;
.....
 My Enum....

これは、フォームから ClassA.MyEnum にアクセスする方法です。
とにかく、この解決策が気に入らない場合は、Enum を別の場所で再定義することはできません。
ClassB.MyEnum という別の列挙型を作成し、ClassB.MyEnum の任意の値を ClassA.MyEnum にマップできます。ここにその回避策のサンプルがありますが、それが役立つかどうかはわかりません。

public class ClassB
 {
  public enum MyEnum
    {
     MyValue1,
     MyValue2
     }

   public static MyEnum Convert (ClassA.MyEnum originalValue)
    {
     return (MyEnum)Enum.Parse (typeof (MyEnum), originalValue.ToString());
    }
 } 

MyEnum を ClassA の外に移動することをお勧めします。

于 2012-04-13T11:01:02.553 に答える
0

あなたのすべてのコメントが私のケースに最適な解決策を見つけるのに役立ったので、私は先日ずっとあなたに賛成票を投じました。

私が最終的に従った解決策は、すべてをリファクタリングして、その列挙型 (またはその他のもの) を必要とするすべてのコードを ClassA から ClassB に取得し、ClassB がイベントを通じて操作の結果をメイン プロジェクトに報告できるようにすることでした。入ってくる結果で UI を更新します。

これが最終的にこの問題の最良の解決策だと思います

于 2012-04-16T17:32:27.227 に答える