1

複数の C# ファイル間でインスタンス化する必要がある変数にアクセスするための推奨される方法は何ですか?

たとえば、メソッドからメソッドに渡されない限り、あるファイルで辞書を宣言して別のファイルで使用することはできません。

バイト配列でも同じ問題があります。

私は主に C++ コーダーであり、これらの問題はインクルード ファイルまたは extern 宣言によって処理されます。

C# の「小さい」変数はグローバルにできます。しかし、このオプションは、私の知る限り、辞書やバイト配列のようにインスタンス化する必要がある変数では使用できません。

初心者の質問で申し訳ありませんが、本やインターネットで解決策が見つかりません。同じプロジェクト内の 2 つの C# ファイルでディクショナリを使用する方法を理解しようとして、今日のかなりの部分を無駄にしましたが、答えはありませんでした。

問題の詳細を確認するには、次のようにします。

これは、MainWindow.xaml.cs での宣言です。

 public partial class MainWindow : Window
{
    public static byte[,] TerrainMap;

しかし、別のファイル PlantDisplay.xaml.cs (同じ名前空間を共有する) でアクセスしようとすると、次のエラーがスローされます: error CS0103: The name 'TerrainMap' does not exist in the current context

4

5 に答える 5

3

ディクショナリを静的にすることはできますが、それは貧弱な設計オプションのように見えます。ISettingsProviderオブジェクト指向の観点からは、GetValue/SetValue メソッドのように、必要な関数をディクショナリから意味のある名前の別のインターフェイスに配置し、それを必要とする他のクラスのコンストラクターに渡すことをお勧めします。

依存性注入を使用して、これらのクラスを結び付けることもできます。

于 2013-06-18T21:32:44.947 に答える
1

必要な変数を static (および public) としてクラスを作成します。

後でどこからでも好きなように変更できます。静的として宣言し、どこでも「インスタンス化」します。

class MyClass
{
    public static Dictionary<int, string> dictionary;
}

そしてどこでも:

MyClass.dictionary = new Dictionary<int, string>();
//...
于 2013-06-18T21:28:19.663 に答える
1

おそらく、あなたはstatic membersを探しています:

public class SomeClass
{
    public static IDictionary<string, string> SomeAccessibleDictionary = new Dictionary<string, string> 
    {
        { "dictionary", "data" },
        { "key", "value" },        
    }
}

このサンプルには、次の方法でアクセスできます。

SomeClass.SomeAccessibleDictionary
于 2013-06-18T21:28:25.710 に答える
1

部分クラスを使用する:

ファイル myclass1.cs:

public partial class MyClass
{
    public SomeObject SomeProperty {get;set;}
}

ファイル myclass2.cs:

public partial class MyClass
{
    private void SomeMethod()
    {
        var myprop = this.SomeProperty;
    }

}

コンパイルすると、これら 2 つの別個のコードは単一のクラスにコンパイルされます。

于 2013-06-18T21:30:32.043 に答える
0

クラスの public static には、どこからでもアクセスできます。C# では、ファイル間であっても、宣言された任意の型にアクセスできます。プロジェクト内に型が存在する限り、C# は型名を解決できるという点で C++ とは異なります。ヘッダーなどを #include する必要はありません。

そうは言っても、 public static フィールドへのアクセスは、多くの場合、設計が悪いことを示しています。それらが必要な場合や生活を楽にする場合もありますが、多くの場合、より良い方法があります。

于 2013-06-18T21:28:54.787 に答える