Fre*_*man 1 .net c# asp.net-mvc
例:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
我问这个是因为它有一个小悖论,我知道在将这个类实例化为一个新对象时,总是先调用构造函数.我不想让它成为一个静态方法,因为这将创建一个不会被垃圾收集的静态实例.
如果我错了请纠正我,非常欢迎来自经验丰富的程序员的明确答复.谢谢.
在构造函数中调用非静态方法可以是正确的 - 但是你应该避免使用虚方法,因为如果重写该方法,将在尚未调用类型级构造函数的类型上调用实际方法 -会引起问题.
调用静态方法会更可靠.我认为你不想要静态方法的原因有点混乱,并且不适用.绝对没有理由避免使用静态方法.静态方法未实现为"未收集垃圾的静态实例"上的实例方法.有没有实例的静态方法.