存储类型字段/变量

时间:2012-07-17 00:44:19

标签: c# static field

如何在静态字段中存储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);
    }
}

3 个答案:

答案 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)无用,因为支持字段无论如何都是公共的。