gpt4 book ai didi

c#-4.0 - C# 惰性属性

转载 作者:行者123 更新时间:2023-12-04 00:31:05 25 4
gpt4 key购买 nike

我的类(class)中有一个 Lazy 属性:

private Lazy<ISmtpClient> SmtpClient
{
get
{
return new Lazy<ISmtpClient>(() => _objectCreator.Create<ISmtpClient>(), true);
}
}

还有一种使用此属性的方法:
public void SendEmail(MailMessage message)
{
SmtpClient.Value.ServerName = "testServer";
SmtpClient.Value.Port = 25;

SmtpClient.Value.Send(message);
}

但是在我的 SmtpClient 中,在 Send(string message) 方法中是我在上面的 SendEmail(MailMessage message) 方法中初始化的所有属性,null。

我该如何解决这个问题?

提前致谢。

最佳答案

您正在使用 Lazy<T>错了。

使用时 Lazy<T>你公开了一个实际类型的属性,你有一个 Lazy<T>实例。每次访问该属性时,您都不会创建一个新属性:

Lazy<ISmtpClient> _smtpClient =
new Lazy<ISmtpClient>(() => _objectCreator.Create<MySmtpClient>(), true);

private ISmtpClient SmtpClient
{
get
{
return _smtpClient.Value;
}
}

现在,第一次 SmtpClient属性被访问,对象创建者创建一个新的 MySmtpClient 实例.这是返回。在后续调用中,将返回相同的实例。

用法如下:
public void SendEmail(MailMessage message)
{
SmtpClient.ServerName = "testServer";
SmtpClient.Port = 25;

SmtpClient.Send(message);
}

关于c#-4.0 - C# 惰性属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14730636/

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