在方法的 return 值内保留从文件获取的值
Retaining a value obtained from file within the return value of a method
假设我需要通过不同的方法多次访问给定文件中包含的值,我可以在方法中包含某种布尔值以确定调用文件?
假设我有文件 config.cfg。在那个文件中,有三个值:
string/name>max|
bool/adult>yes|
int/age>20|
方法getUserName()
returns值"max"
。它通过调用文件来做到这一点:
using (StreamReader reader = new StreamReader(path))
{
//get line beginning with string/name here
return //string value containing name
}
假设我需要多次使用 name
的值,以及 isAdult
和 clientAge
的值。与其一遍又一遍地访问文件,不如以某种形式的静态变量保存请求的值会容易得多。但是,当第一次调用该方法时,此变量的值仍需要至少更改一次。
我可以在 方法 getUserName()
中执行此操作吗?
此外,这个想法在 OOP 的范围内是否可行?是不是和Prefetch类似的概念?
创建静态 class。像这样:
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(),例如(或每当您需要检索配置数据时)
在我看来,您确实需要以惰性方式访问字段(即仅在需要时,在需要时)。如果是这样,.NET 有 Lazy class 用于这种情况,它还提供开箱即用的线程安全性:
public static Lazy<string> Name { get; } = new Lazy<string>(() => ReadNameFromFile());
Lazy 还将确保您只创建一次值(即调用初始化方法),在以后的调用中它会简单地return 已经检索到值。
假设我需要通过不同的方法多次访问给定文件中包含的值,我可以在方法中包含某种布尔值以确定调用文件?
假设我有文件 config.cfg。在那个文件中,有三个值:
string/name>max|
bool/adult>yes|
int/age>20|
方法getUserName()
returns值"max"
。它通过调用文件来做到这一点:
using (StreamReader reader = new StreamReader(path))
{
//get line beginning with string/name here
return //string value containing name
}
假设我需要多次使用 name
的值,以及 isAdult
和 clientAge
的值。与其一遍又一遍地访问文件,不如以某种形式的静态变量保存请求的值会容易得多。但是,当第一次调用该方法时,此变量的值仍需要至少更改一次。
我可以在 方法 getUserName()
中执行此操作吗?
此外,这个想法在 OOP 的范围内是否可行?是不是和Prefetch类似的概念?
创建静态 class。像这样:
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(),例如(或每当您需要检索配置数据时)
在我看来,您确实需要以惰性方式访问字段(即仅在需要时,在需要时)。如果是这样,.NET 有 Lazy class 用于这种情况,它还提供开箱即用的线程安全性:
public static Lazy<string> Name { get; } = new Lazy<string>(() => ReadNameFromFile());
Lazy 还将确保您只创建一次值(即调用初始化方法),在以后的调用中它会简单地return 已经检索到值。