Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字段/变量中的存储类型_C#_Static_Field - Fatal编程技术网

C# 字段/变量中的存储类型

C# 字段/变量中的存储类型,c#,static,field,C#,Static,Field,如何将类型存储在静态字段中,以便执行类似操作(注意:只是一个伪代码示例): 除了new是一个关键字之外,存储类型的代码应该可以正常工作 但是,您的代码 Writer.Write(str); 这是毫无意义的 类Type没有方法Write(string) 感觉你想要的是一个 这样,您就可以将实现IWriter的任何类传递到SetWriter,例如 public class MyWriter : IWriter { public void Write(string text) {

如何将类型存储在静态字段中,以便执行类似操作(注意:只是一个伪代码示例):


除了
new
是一个关键字之外,存储类型的代码应该可以正常工作

但是,您的代码

Writer.Write(str);
这是毫无意义的

Type
没有方法
Write(string)

感觉你想要的是一个

这样,您就可以将实现
IWriter
的任何类传递到
SetWriter
,例如

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

Logger.SetWriter(new MyWriter());

好吧,那个示例代码毫无意义,但为什么不简单地使用一个公共接口呢?例如,
System.IO
名称空间中的所有(我认为至少所有)文本写入类型都继承自抽象类
TextWriter
,因此

例如:

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

    private TextWriter _writer;    

    public void Write(string text)
    {
        _writer.Write(text);
    }
}
现在,公开编写者并依靠代码用户确保其始终有效是一个好主意吗?可能不会,但这更多的是一种设计考虑。另外,您的java样式设置器是A)C#的非典型,C#对属性有很好的语法支持,B)因为支持字段是公共的,所以毫无用处。

非常简单:

Type variableName = typeof(SomeTypeName);


不过,我不确定这是否有助于你真正想做的事情。查看其他答案。

您实际想要实现的目标是什么?不是在代码中,而是作为一个抽象概念?我试图将类型存储在任何类型的变量中,但类型本身不是一个语句,因此它不起作用…您不能使用某个类型的实例,而不是
类型
?可能是类似于
TextWriter
?@Jwosty是的,但你为什么要这么做?根本原因是什么?确实是斯维克;我认为他想要的行为也可以通过泛型更好地实现;而不是持有类型;只要有一个在类型上工作的助手类。不管怎样,泛型还是一些界面设计。为了更好地描述我的具体情况,我改变了帖子
public class Logger
{
    public Logger(TextWriter writer)
    {
        _writer = writer;
    }

    private TextWriter _writer;    

    public void Write(string text)
    {
        _writer.Write(text);
    }
}
Type variableName = typeof(SomeTypeName);
Type variableName = someObject.GetType();