在列表中创建类实例

用户名

我想要完成的是:

Logger类应声明一个集合LogMedia作为成员变量,并且只需要声明一个函数:void LogException( Exception ex )在此函数内部,应遍历所有LogMedia实例,并调用每个实例中定义的虚函数。

我无法理解的是如何实现遍历所有这些实例的循环。或者,也许我该如何创建这些实例?

记录仪类别

public class Logger
    {
       static List<LogMedia> m_loggers = new List<LogMedia>();

         **//Should I create som instances here?**
        public static void LogException(Exception ex)
        {
            foreach(var i in m_loggers)
            {
                i.LogMessage(ex.Message + Environment.NewLine);
            }
        }

        }
    }

LogMediaClass *:然后,我要创建类logmedia和其他三个类,其中“每个派生类随后应在LogMedia类中重写此函数。如何创建这三个类的实例,以便可以遍历它们,如图所示在记录仪中?*

public class LogMedia
    {
        public virtual void LogMessage(string Message) { } //virtual function that doesen't do anything

    }
    public class OutputWindowLogMedia : LogMedia
    {
        public override void LogMessage(string Message)
        {
            System.Diagnostics.Debug.WriteLine(Message);
        }
    }
    class TextFileLogMedia : LogMedia
    {
        public override void LogMessage(string Message)
        {
            StreamWriter writer = new StreamWriter("C:\\Temp\\xxx\\xxxx.txt");
            writer.WriteLine(Message + " the error occured at: ");
            writer.Close();
        }
    }
    class EmailLogMedia : LogMedia
    {
        public override void LogMessage(string Message)
        {


            const string senderID = "[email protected]"; // use sender's email id here..
            const string toAddress = "[email protected]";
            const string senderPassword = "xxxx"; // sender password here...
            try
            {
                SmtpClient smtp = new SmtpClient
                {
                    Host = "smtp.gmail.com", // smtp server address here...
                    Port = 587,
                    EnableSsl = true,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    Credentials = new System.Net.NetworkCredential(senderID, senderPassword),
                    Timeout = 30000,
                };
                MailMessage message = new MailMessage(senderID, toAddress, "erroe", "error");
                smtp.Send(message);
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("Error sending mail:" + ex.Message);
                Console.ResetColor();
            }

        }
    }
Sourav'Abhi'Mitra

请在静态构造函数中初始化

在其中添加所有记录器。可以确保在每次LogException()调用该列表时,都会看到该函数是静态的,从而填充该列表。

另外,请考虑一下,一定要将基本LogMedia设置为abstractinterface

现在也有一个副作用,每当将来某个时候添加新的LogMedia时,Add都必须在静态构造函数中添加一个调用。

这可能会导致大型项目出现维护错误,因此,为避免这种情况,请InitializeAllLoggers()在静态构造函数中添加一个方法,并将以下代码放入其中。

foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies().ToList())
{
    foreach (Type classType in assembly.GetTypes())
    {
         if (classType.IsClass
                    && !classType.IsAbstract
                    && classType.IsSubclassOf(typeof(LogMedia)))                     
         {
              m_loggers.Add(Activator.CreateInstance(classType) as LogMedia);
         }
    }
}

这样可以确保无论何时LogMedia创建新的类型,都会将其自动添加到记录器列表中。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何从列表中创建类实例?

来自分类Dev

使用列表中的名称创建类的实例

来自分类Dev

如何获取类中的内部类列表并创建实例

来自分类Dev

在Java中创建类的实例?

来自分类Dev

在类本身中创建类的实例

来自分类Dev

检查数组列表中的项是否是另一个类中创建的对象的实例

来自分类Dev

检查数组列表中的项目是否是另一个类中创建的对象的实例

来自分类Dev

计算Python列表中的类实例

来自分类Dev

在Haskell中创建分数类型类的实例

来自分类Dev

在C ++中创建类的实例的向量

来自分类Dev

在python 2.7中创建类的实例

来自分类Dev

从符合协议的类中创建实例

来自分类Dev

如何在Smalltalk中创建类的实例?

来自分类Dev

在VBA中创建类的实例的函数

来自分类Dev

在Python中动态创建类实例

来自分类Dev

在python 2.7中创建类的实例

来自分类Dev

在Java中创建静态嵌套类的实例

来自分类Dev

如何在Smalltalk中创建类的实例?

来自分类Dev

Typescript在类中创建新实例

来自分类Dev

在 Wordpress 插件中创建 PHP 类的实例

来自分类Dev

如何创建从实现接口的基类派生的实例列表?

来自分类Dev

在Python的元类中创建类的实例是否安全?

来自分类Dev

使用Java从类数组中创建类的新实例

来自分类Dev

从Typescript中的Base类创建Child类的新实例

来自分类Dev

在其基类中创建当前类的默认实例

来自分类Dev

当类类型存储在变量中时,如何创建类的实例?

来自分类Dev

如何在类内的方法python中创建类的实例

来自分类Dev

如何在类的方法中引用创建的类实例?

来自分类Dev

Pygame问题使用列表中的列表创建实例

Related 相关文章

热门标签

归档