2012-07-17 34 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(); 

不知道這會幫助你真正想做的事,雖然。查看其他答案。