例子:在包含该方法的对象的构造函数中调用实例方法是否是一种很好的做法?
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();
}
}
我问这个,因为它是一个小矛盾,我知道这个实例类到一个新的对象的时候,总是构造被称为第一次。我不想让它成为一个静态方法,因为这会创建一个不会收集垃圾的静态实例。
如果我错了,请纠正我,经验丰富的程序员的明确答复是非常受欢迎的。谢谢。
静态*方法*不会导致使用任何额外的内存。 (没有什么比等效的实例方法 - 代码存在于程序集中,得到JITted等) –
已注意。谢谢。所以关于这个问题,只有当你创建一个静态类时,它才会真正留在内存中。这是一个真实的陈述吗? – Freeman
我会让这个方法变成静态的,因为它实际上只是一个从“String”到“SmtpDeliveryMethod”的“翻译”,并且它不使用对象中的任何实例信息。像Andrew Russell一样,我认为你会将静态方法与静态域混淆。你担心什么是不会被垃圾收集的? –