class LogUtil : ILogUtility
{
object _classtype;
log4net.ILog log;
public LogUtil(object classtype)
{
_classtype = classtype;
log = log4net.LogManager.GetLogger(_classtype.GetType().FullName);
}
public void Log(LogType logtype, string message)
{
Console.WriteLine("logging coming from class {0} - message {1} " , _classtype.GetType().FullName, message);
}
}
从客户端类代码中,我按如下方式调用上面的LogUtil类:
public class TestCode
{
public void test()
{
LogUtil logutil = new LogUtil(this);
}
}
在LogUtil构造函数中,我希望AVOID传入 object classtype。 我想传递我可以传递给GetLogger方法的客户端类对象。 GetLogger方法需要知道哪个类实例化了LogUtil类。
我现在的方式,我可以传入整数变量类类型,它会工作。我想避免它。
我该怎么做?在这种情况下如何使用泛型方法?
答案 0 :(得分:3)
这是你想要的吗?
class LogUtil<T> : ILogUtility
{
log4net.ILog log;
public LogUtil()
{
log = log4net.LogManager.GetLogger(typeof(T).FullName);
}
public void Log(LogType logtype, string message)
{
Console.WriteLine("logging coming from class {0} - message {1}", typeof(T).FullName, message);
}
}
然后您可以像这样使用它:
LogUtil<TestCode> logutil = new LogUtil<TestCode>();
答案 1 :(得分:2)
如果您使用方法级泛型,而不是类级泛型(或者更确切地说,除此之外),您可以让类型推断使您更容易。
class LogUtil<T> : ILogUtility
{
log4net.ILog log;
public LogUtil<T>()
{
log = log4net.LogManager.GetLogger(typeof(T));
}
public void Log(LogType logtype, string message)
{
Console.WriteLine("logging coming from class {0} - message {1} " , typeof(T).FullName, message);
}
public static LogUtil<NewType> Create<NewType>(NewType instance)
{
return new LogUtil<NewType>();
}
}
public class TestCode
{
public void test()
{
var logutil = LogUtil.Create(this);
}
}
答案 2 :(得分:1)
我将其更改为:
class LogUtility : ILogUtility
{
private Type classType;
public LogUtil(object o)
: this(o.GetType())
{
}
public LogUtil(Type t)
{
this.classType = t;
}
public static LogUtil Create<T>()
{
return new LogUtil(typeof(T));
}
public void Log(string message)
{
Console.WriteLine("logging coming from class {0} - message {1} " , this.classType, message);
}
}
答案 3 :(得分:0)
请修改LogUtil类,如下所示。
class LogUtil : ILogUtility
{
Type _classtype;
log4net.ILog log;
public LogUtil(Type classtype)
{
_classtype = classtype;
log = log4net.LogManager.GetLogger(_classtype.FullName);
}
public void Log(LogType logtype, string message)
{
Console.WriteLine("logging coming from class {0} - message {1} " , _classtype.FullName, message);
}
}
客户端代码应如下所示
public class TestCode
{
public void test()
{
LogUtil logutil = new LogUtil(GetType());
}
}