在保存实例方法的对象的构造函数中调用实例方法是否是一种好的做法

本文关键字:实例方法 一种 是否是 对象 保存 构造函数 调用 | 更新日期: 2023-09-27 18:36:38

示例:

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();
        }
    } 

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

如果我错了,请纠正我,非常欢迎经验丰富的程序员同事的明确回答。谢谢。

在保存实例方法的对象的构造函数中调用实例方法是否是一种好的做法

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

调用静态方法会更可靠。我认为您想要静态方法的原因有点混乱,并且不适用。绝对没有理由避免使用静态方法。静态方法不是在"不进行垃圾回收的静态实例"上实现为实例方法的。静态方法没有实例

相关文章: