2017-06-10 78 views
0

假設我需要訪問包含在給定文件中的值,從不同的方法中可以在方法中包含某種布爾值確定是否適合調用該文件?在方法的返回值內保留從文件獲得的值

可以說我有文件config.cfg。在該文件中,有三個值:

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

getUserName()返回"max"值的方法。這是通過調用文件:

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

假設我需要使用name幾倍的價值,以及價值isAdultclientAge。而不是一遍又一遍地訪問文件,可能會更容易將請求的值以某種形式的靜態變量保存。但是,該方法首次調用時,該變量至少需要更改一次。

我可以這樣做裏面的的方法getUserName()
此外,這個想法甚至可能在面向對象的範圍內?這與Prefetch類似嗎?

+0

您可能希望創建一個解析文件並將這些值作爲屬性的單例類。第一次訪問該類時,它將加載該文件,然後在將來的訪問將在內存中。 – juharr

+0

爲什麼不是靜態的,並將其設置爲初始值null。簡單,乾淨,儘管純粹主義者認爲這是一個合適的(實際上是c#語言定義的特別設計意圖)使用靜態變量。 – Rob

+0

@Rob,因爲這需要類中的其他對象。我試圖在單個方法中做所有事情,並且在需要的時候,而不是爲'Name'創建一個單獨的值。這意味着如果我正在執行的功能不需要文件中包含的某些數據,我不必訪問它。僅供參考我在這裏瞄準嵌入式平臺,因此精簡的必要性。 –

回答

0

這真的看起來對我來說,你需要以一種懶惰的方式訪問一個領域(即只有在需要時才需要)。如果是這樣的.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 
    } 
    } 

並調用ClientConfig.Load()第一次當你的應用程序啓動,例如(或當你需要檢索配置數據)

+0

你可以擴展它如何工作? get/set功能在這裏如何應用? –

+0

這是基本的OOP。 Name,IsAdult和Age是類屬性(在這個例子中它們是靜態的)。請閱讀更多關於[class properties here](https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/using-properties)以及什麼是[static](https ://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/static) – DolceVita