如何在静态字段中存储Type,以便我可以执行类似的操作(注意:只是一个示例,在伪代码中)?:
public class Logger
{
public static Type Writer;
public static void SetWriter(Type @new)
{
Writer = @new;
}
public static void Write(string str)
{
Writer.Write(str);
}
}
答案 0 :(得分:17)
很简单:
Type variableName = typeof(SomeTypeName);
或
Type variableName = someObject.GetType();
不确定这会对您实际想做的事情有所帮助。请参阅其他答案。
答案 1 :(得分:2)
除了new
是关键字这一事实外,存储该类型的代码应该可以正常工作。
但是,您的代码
Writer.Write(str);
毫无意义。
班级Type
没有方法Write(string)
。
感觉就像你所追求的是interface
public interface IWriter
{
public Write(string text);
}
public class Logger
{
public static IWriter Writer;
public static void SetWriter(IWriter newWriter)
{
Writer = newWriter;
}
public static void Write(string str)
{
Writer.Write(str);
}
}
这样,你就可以将任何实现IWriter
的类传递给SetWriter
,例如
public class MyWriter : IWriter
{
public void Write(string text)
{
// Do something to "write" text
}
}
Logger.SetWriter(new MyWriter());
答案 2 :(得分:0)
那么,该示例代码没有意义,但为什么不简单地使用通用接口?例如,System.IO
命名空间中的所有(我认为至少全部)文本编写类型都继承自抽象类TextWriter
,所以......
例如:
public class Logger
{
public Logger(TextWriter writer)
{
_writer = writer;
}
private TextWriter _writer;
public void Write(string text)
{
_writer.Write(text);
}
}
现在,让作者公开并依赖代码用户来确保它始终有效是一个好主意吗?可能不是,但这更像是一个设计考虑因素。此外,你的java风格的setter是A)非典型的C#,它对属性有很好的语法支持,而B)无用,因为支持字段无论如何都是公共的。