2016-10-05 1 views
0

こんにちは私はプログラミングの世界で多少新しいです。 私はテストオブジェクトのインターフェイスを作成しようとしました。私はオブジェクトを作成するとすぐにStackOverflowExceptionを取得します。StackOverflowException with interface

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

は、ときに '何が起こるかについて慎重に考えますName'プロパティは 'Name'を取得または設定しようとしますが、再び' Name'を取得または設定します... –

答えて

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; 
    } 
} 
+0

ほとんどの人は通常プライベート文字列を持っています_name 名前は、自動取得/設定がisn '十分に – UKMonkey

+0

@ w0lf - 'name'の名前を' _name'に変更したい –

+1

@GiladGreen良い点。私は答えを編集しました。 – GolfWolf