gpt4 book ai didi

c# - 为多个 getter 执行的公共(public)操作

转载 作者:行者123 更新时间:2023-11-30 19:15:48 26 4
gpt4 key购买 nike

我正在尝试找到一种巧妙的方法来在首次访问多个 getter 中的一个时触发加载机制。我的第一个想法是这样的:

public class Customer {
private bool loaded = false;

public int PK { get; set; }
public string Email { get; set; }

public string Name { get { if (!loaded) loadData(); return _name; } set { ... } }
public string Street { get { if (!loaded) loadData(); return _street; } set { ... } }
public string City { get { if (!loaded) loadData(); return _city; } set { ... } }
}

简而言之,在此示例中,每个 Customer 都存在其基础数据 PKEmail,直到访问其他属性之一。

这意味着很多重复代码,随着类的复杂性而增加。有没有办法为这些属性创建某种继承?

类似这样的事情,但我认为这是不可能的:

private void checkData() { if (!loaded) loadData(); }
public string Name:checkData { get; set; }
public string Street:checkData { get; set; }
public string City:checkData { get; set; }

另一种方法可能是通过反射实现的,但由于我没有这方面的经验,所以我不知道从哪里开始。

非常感谢任何提示! ;-)

最佳答案

您可以使用 Lazy<T>类来包装次要属性。这条路loadData只有在任何辅助 getter 被调用时才会执行,并且不会执行多次。

    public class Customer
{

public int PK { get; set; }
public string Email { get; set; }

public string Name { get { return data.Value.Name; } }
public string Street { get { return data.Value.Street; } }
public string City { get { return data.Value.City; } }

public Customer()
{
data = new Lazy<CustomerData>(loadData);
}


private CustomerData loadData()
{
...
}

private struct CustomerData
{
public string Name, Street, City;
}

private Lazy<CustomerData> data;
}

关于c# - 为多个 getter 执行的公共(public)操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32818232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com