2

Application から派生した MyApplication 型があります。プログラム全体で、常に実行されている Application オブジェクトは 1 つだけです。文字列、int、およびいくつかの構成値などの共有リソースが MyApplication に配置されている場合、アプリケーション オブジェクトへの参照なしで他のクラスからそれらにアクセスするための受け入れ可能な方法は何だと思いますか? を呼び出して MyApplication の公開文字列にアクセスしても((MyApplicationType)Application.Current).SomeStringよろしいですか? または、Application オブジェクトを参照する方法を明示的に追加する必要がありますか?

メソッドはどうですか?を呼び出してアプリケーションのメソッドにアクセスすることもできます((MyApplicationType)Application.Current).SomeMethod()か? それは間違いなく機能しますが、その意味と、これが悪い習慣と見なされるかどうかについては明確ではありません。

4

2 に答える 2

1

MSDNの発言によると、それでも大丈夫だと思います。ただし、ResourceDictionaryでリソースを定義する方が適切であり、XAML / C#で使用でき、ローカリゼーションが容易になると思います。リンクを参照できます:http: //msdn.microsoft.com/en-us/library/ms750613.aspx http://msdn.microsoft.com/en-us/library/bb613547.aspx

備考

アプリケーションはAppDomainごとのシングルトンタイプであり、静的なCurrentプロパティを実装して、現在のAppDomainのアプリケーションインスタンスへの共有アクセスを提供します。この設計により、共有リソースや状態など、アプリケーションによって管理される状態が単一の共有ロケーションから利用できることが保証されます。このプロパティはスレッドセーフであり、どのスレッドからでも利用できます。

方法については、それはあなたの方法が何をするかに依存すると思います。メソッドが一時ファイルパスを返すだけの場合は、静的にしませんか?

于 2013-02-05T14:35:23.080 に答える
0

構成値は、app.config ファイルの読み取りから取得する必要があります。これに関する SO Q/A は次のとおり です。WPF アプリケーションで App.config ファイルを使用するにはどうすればよいですか?

変更されない、または構成できない値については、定数メンバーを持つ静的クラスを使用して、必要に応じてアクセスできるようにします。

public static class UsefulConstants
{
  public const int FeetInMile = 5280;

  public const int DaysInWeek = 7;

  public const string SampleString = "This is a sample";
}

静的クラスの使用は簡単です。

int f = UsefulConstants.FeetInMile;

関連する整数値は、列挙型として指定できます。

public enum MonthValue
{
    January = 1,
    February = 2,
    March = 3,
    //Omitted for brevity...
    December = 12
}

列挙型を使用すると、メソッドのパラメーターを関連する値に制限できるという追加の利点があります。

public SomeFunction(MonthValue month)
{
   //Do something here with the month passed in
}
于 2013-02-05T13:44:39.980 に答える