2017-06-10 9 views
0

あるファイル内の値にアクセスする必要があると仮定すると、メソッド内で少数のブール値を含むことができますファイルを呼び出すのが適切かどうかを判断するメソッドの戻り値内のファイルから得られた値を保持する

私はファイルconfig.cfgを持っていると言います。

string/name>max| 
bool/adult>yes| 
int/age>20| 

"max"の値を返すgetUserName()方法:そのファイルに、3つの値が存在します。これは、ファイルを呼び出すことによってこれを行います:

using (StreamReader reader = new StreamReader(path)) 
{ 
    //get line beginning with string/name here 
    return //string value containing name 
} 

のは、私がname数倍の値だけでなく、値isAdultclientAgeを使用する必要があると仮定しましょう。ファイルに何度も何度もアクセスするのではなく、要求された値を静的変数の何らかの形で保存する方がはるかに簡単です。ただし、この変数は、メソッドが最初に呼び出されたときに、少なくとも1回は値を変更する必要があります。

の中でgetUserName()の方法を使用できますか?
さらに、このアイデアはOOPの範囲内でも可能ですか? Prefetchと同様のコンセプトですか?

+0

ファイルを解析し、その値をプロパティとして持つシングルトンクラスを作成したい場合があります。クラスに初めてアクセスするときにファイルをロードし、その後はアクセス権がメモリに格納されます。 – juharr

+0

なぜ静的なものではないのですか?初期値はnullです。シンプルでクリーンな、そして純粋主義者が言うことにもかかわらず、静的変数の使用が適切です(実際にはC#言語定義の意図的な意図です)。 – Rob

+0

@Robこれは、クラス内に追加のオブジェクトが必要なためです。私は、 'Name'のための別個の値を作るのではなく、必要に応じて、単一のメソッドの中ですべてをやろうとしています。つまり、ファイルに含まれるデータの一部を必要としない関数を実行している場合、アクセスする必要はありません。参考:ここでは、組み込みプラットフォームをターゲットにしています。したがって、合理化の必要性があります。 –

答えて

0

それは本当にあなたがする必要があるように私には見えます(またはたびに、設定データを取得する必要がある)ときClientConfig.Load()を初めて呼び出します怠惰な方法でフィールドにアクセスする(必要な場合のみ、必要な場合のみ)。そう.NETはまた、箱から出して、スレッドの安全性を提供し、このような場合のために怠惰なクラスを持っている場合:

レイジーはまた、あなたが一度だけ値を作成することを保証します
public static Lazy<string> Name { get; } = new Lazy<string>(() => ReadNameFromFile()); 

(すなわちinitiailizationメソッドを呼び出す)とに後でそれを呼び出すには、単に意志すでに検索された値を返します。

0

静的クラスを作成します。このような何か:

public static class ClientConfig{ 

    public static string Name{get;set;} 
    public static bool IsAdult{get;set;} 
    public static int Age{get;set;} 

    public static void Load(){ 
    // load your values 
    // ClientConfig.Name = name from file etc. 
    } 


    public static void Save(string newName, int age, bool value){ 
    // save your values to the config file 
    } 
    } 

、アプリが起動する、例えば

+0

これはどのように機能しますか?ここでget/set機能はどのように適用されますか? –

+0

これは基本的なOOPです。名前、IsAdult、Ageはクラスプロパティです(この例では静的です)。 [クラスのプロパティはこちら](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/using-properties)と[静的](https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/static) – DolceVita

関連する問題