2012-07-17 52 views
5

我怎么能存储在一个静态字段一个类型,这样我可以做这样的事情(注:只是一个例子,在伪代码)?:商铺类型/可变

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

你究竟在努力实现什么?不是代码而是一个抽象的想法? – 2012-07-17 00:45:52

+0

我试图在任何类型的变量中存储一个类型,但类型本身不是一个语句,所以它不工作... – Jwosty 2012-07-17 00:47:04

+1

你不能使用某种类型的实例,而不是' Type'?也许像“TextWriter”? – svick 2012-07-17 00:47:08

回答

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); 
    } 
} 

这样的话,你会传递实现IWriterSetWriter任何类,例如

public class MyWriter : IWriter 
{ 
    public void Write(string text) 
    { 
     // Do something to "write" text 
    } 
} 

Logger.SetWriter(new MyWriter()); 
+0

我已更改帖子以更好地描述我的确切位置 – Jwosty 2012-07-17 01:46:37

0

那么,该示例代码没有意义,但为什么不简单地使用通用接口呢?例如,所有的(我认为所有至少)从抽象类TextWriterSystem.IO命名空间继承文本书写类型的,所以...

例如:

public class Logger 
{ 
    public Logger(TextWriter writer) 
    { 
     _writer = writer; 
    } 

    private TextWriter _writer;  

    public void Write(string text) 
    { 
     _writer.Write(text); 
    } 
} 

现在,它是一个将作者公开并依靠代码的用户来确保它始终有效的好主意?可能不会,但这更多的是设计考虑因素。另外,你的java风格设置器是A)对C#非常典型,它对属性有很好的语法支持,B)无用,因为后台字段是公开的。

11

很简单:

Type variableName = typeof(SomeTypeName); 

Type variableName = someObject.GetType(); 

不知道这会帮助你真正想做的事,虽然。查看其他答案。