gpt4 book ai didi

c# - 在持有该方法的对象的构造函数中调用实例方法是否是一种好习惯?

转载 作者:太空宇宙 更新时间:2023-11-03 18:13:11 25 4
gpt4 key购买 nike

例:

public class EmailBusinessLogic
{
#region Fields and Constructors
SmtpClient smtp;
Parameter prm;

public EmailBusinessLogic()
{
prm = CostHelper.GetParameter();
smtp = new SmtpClient(prm.EmailHost, prm.EmailPort);
smtp.UseDefaultCredentials = prm.EmailUseDefaultCredentials;
smtp.DeliveryMethod = GetDeliveryMethod(prm.EmailDeliveryMethod); //CALL TO METHOD DOWN BELOW, IS THIS A GOOD PRACTICE?
smtp.EnableSsl = prm.EmailEnableSSL;
smtp.Credentials = new NetworkCredential(prm.AppUserName, prm.AppPass, prm.AppNetworkDomain);

}
#endregion

#region Instance Methods
public SmtpDeliveryMethod GetDeliveryMethod(string name)
{
switch (name)
{
case "Network": return SmtpDeliveryMethod.Network;
case "IISDirectory": return SmtpDeliveryMethod.PickupDirectoryFromIis;
case "OtherDirectory": return SmtpDeliveryMethod.SpecifiedPickupDirectory;
default: throw new NonExistentObjectException();
}
}


我之所以这样问是因为它有一个小的悖论,我知道在将此类实例化为新对象时总是首先调用构造函数。而且我不想将其设为静态方法,因为这将创建一个不会被垃圾收集的静态实例。

如果我错了,请纠正我,非常欢迎有经验的程序员给出明确的答案。谢谢。

最佳答案

在构造函数中调用非静态方法是可以的-但对于虚拟方法则应避免使用它,因为如果重写该方法,则将在尚未调用类型级构造函数的类型上调用实际方法-会引起问题。

调用静态方法会更可靠。我认为您不希望使用静态方法的原因有些困惑,因此不适用。绝对没有理由避免使用静态方法。在“不会收集垃圾的静态实例”上,静态方法未作为实例方法实现。没有静态方法的实例。

关于c# - 在持有该方法的对象的构造函数中调用实例方法是否是一种好习惯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10967870/

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