带接口的StackOverflowException

时间:2016-10-05 11:22:18

标签: c# c#-4.0

你好,我对编程世界有些新意。 所以我尝试为测试对象创建一个接口。一旦我创建了对象,我就会得到一个StackOverflowException。

Program.cs

class Program {

    static void Main (string[] args) {
        TestObject test = new TestObject("test");
    }

}

TestObject.cs

public class TestObject : IObject {

    public string Name {get{return Name;}set{Name = value;}}

    public TestObject (string name) {
        Name = name;
    }

}

interface IObject {
    string Name {get;set;}
}

1 个答案:

答案 0 :(得分:2)

问题不在于界面,而在于属性的实现:

public string Name {get{return Name;}set{Name = value;}}

这是一个递归属性(无限调用自身)以及导致StackOverflowException的原因。

您应该像这样定义您的属性(并阅读this):

public string Name {get; set;}

或者,如果您需要使用支持字段:

public class TestObject : IObject {

    private string _name;

    public string Name { 
        get { return _name; }
        set { _name = value; }
    }

    public TestObject (string name) {
        _name = name;
    }
}