使用接口作为构造函数参数

时间:2013-11-18 04:26:36

标签: c#

我定义了一个接口和类这样的类:

interface ITextBox
    {
        double Left { get; set; }
    }

    class TimeTextBox : ITextBox
    {
        public TimeTextBox(ITextBox d)
        {
            Left = d.Left;
        }
        public double Left { get; set; }
    }

我想像这样创建这个类的实例:

ITextBox s;
s.Left = 12;
TimeTextBox T = new TimeTextBox(s);

但是发生了这个错误:

  

使用未分配的局部变量's'

3 个答案:

答案 0 :(得分:5)

在尝试使用之前,您尚未实例化s

你需要做这样的事情:

ITextBox s = new SomeClassThatImplementsITextBox();

TimeTextBox t = new TimeTextBox(s);

界面只是一份合同。它只定义结构。您必须具有实现该接口的类的具体实现。

答案 1 :(得分:1)

引自:http://msdn.microsoft.com/en-us/library/87d83y5b(v=vs.110).aspx

“接口只包含方法,属性,事件或索引器的签名。实现接口的类或结构必须实现接口定义中指定的接口成员。”

您需要一个类或结构来实现您的接口,并且该类或结构需要实例化为一个对象,然后传递给您的构造函数。

实现:

class Example : ITextBox
{
    public double Left { get; set; }
}

实例化:

Example s = new Example();

答案 2 :(得分:0)

ITextBox s;只定义了对实现ITextBox的内容的引用。它没有定义实例。所以在第2行,当你在它上面设置一个属性时,该对象就不存在了。编译器会阻止您犯这个错误,这就是编译器错误的原因。

您需要ITextBox s = new MyClassThatImplementsITextBox();