C# 这个getter每次调用';引用了什么?
假设我有一门课是这样的:C# 这个getter每次调用';引用了什么?,c#,properties,getter,C#,Properties,Getter,假设我有一门课是这样的: public class MyClass { ... public List<SomeClass> MyProperty { get { SomeClass.GetCollectionOfThese(someId); } } ... } 在这种情况下,数据库是否被调用了两次?或者属性值是否缓存在内存中?您的实现将导致多个数据库调用。如果你需要的话,你必须进行缓存。比如: p
public class MyClass {
...
public List<SomeClass> MyProperty {
get {
SomeClass.GetCollectionOfThese(someId);
}
}
...
}
在这种情况下,数据库是否被调用了两次?或者属性值是否缓存在内存中?您的实现将导致多个数据库调用。如果你需要的话,你必须进行缓存。比如:
public class MyClass {
...
private List<SomeClass> _myProperty = null;
public List<SomeClass> MyProperty {
get {
if (_myProperty == null) _myProperty = SomeClass.GetCollectionOfThese(someId);
return _myProperty;
}
}
...
}
公共类MyClass{
...
私有列表_myProperty=null;
公共列表MyProperty{
获取{
如果(_myProperty==null)_myProperty=SomeClass.GetCollectionOfThese(someId);
归还我的财产;
}
}
...
}
当然,您可能希望为客户端提供一种刷新缓存的方法。您的实现将导致多个数据库调用。如果你需要的话,你必须进行缓存。比如:
public class MyClass {
...
private List<SomeClass> _myProperty = null;
public List<SomeClass> MyProperty {
get {
if (_myProperty == null) _myProperty = SomeClass.GetCollectionOfThese(someId);
return _myProperty;
}
}
...
}
公共类MyClass{
...
私有列表_myProperty=null;
公共列表MyProperty{
获取{
如果(_myProperty==null)_myProperty=SomeClass.GetCollectionOfThese(someId);
归还我的财产;
}
}
...
}
当然,您可能希望为客户端提供一种刷新缓存的方法。这取决于您在数据层中使用的技术。
例如,如果将Linq2Sql与单个DataContext一起使用,DataContext将为您缓存实体并从缓存中重新查询它,这样您只需访问数据库一次。但这不是一个典型的方案。这取决于您在数据层中使用的技术。
例如,如果将Linq2Sql与单个DataContext一起使用,DataContext将为您缓存实体并从缓存中重新查询它,这样您只需访问数据库一次。但这不是一个典型的方案。您运行代码了吗?怎么搞的?不管怎样,这都是你的答案。当你有一个问题不能简单地通过运行问题中的代码来回答时,请发布它。例如,假设您想要更改行为或修复它。但是你不需要我们告诉你你的代码是做什么的,运行它应该做到这一点。这就是我问的原因。你运行代码了吗?怎么搞的?不管怎样,这都是你的答案。当你有一个问题不能简单地通过运行问题中的代码来回答时,请发布它。例如,假设您想要更改行为或修复它。但是你不需要我们告诉你你的代码是做什么的,运行它应该做到这一点。这就是我问的原因。编写getter的更简洁的方法是
return\u myProperty??(_myProperty=SomeClass.GetCollectionOfThese(someId))
ah是的,有没有机会使用null coalesce,我接受;)编写getter的更简洁的方法是return\u myProperty??(_myProperty=SomeClass.GetCollectionOfThese(someId))
ah是的,有没有机会使用null coalesce,我接受;)