2014-12-15 4 views
-6

Когда я наткнулся на делегатов, я написал эту действительно простую программу, чтобы практиковать. когда я запускаю его, возникает исключение stackoverflowexception. поэтому, если кто-нибудь может сказать мне, что не так с этим кодом, пожалуйста, потому что я потратил много времени на то, чтобы заставить его работать, но не смог. Вот код:Почему использование делегатов в C# дает stackoverflowexception

using System; 
public delegate void click(); 
class test 
{ 
    public click flare; 
    public double length; 
    public double Length 
    { 
     get 
     { 
      return Length; 
     } 
     set 
     { 
      Length = value; 
      flare(); 
     } 
    } 
} 
class glance 
{ 
    public glance(ref test a) 
    { 
     a.flare = blank; 
    } 
    public void blank() 
    { 
     Console.WriteLine("this is blank"); 
    } 
} 
class Program 
{enter code here 
    static void Main(String[] args) 
    { 
     test know = new test(); 
     glance x = new glance(ref know); 
     know.Length = 10; 
    } 
} 

ответ

4

Это не имеет ничего общего с делегатами. Вы вызываете метод setter внутри setter в Lenght, и это вызывает исключение. Используйте поле поддержки, которое вы создали для своей собственности:

public double Length 
{ 
    get 
    { 
     return length; 
    } 
    set 
    { 
     length = value; 
     flare(); 
    } 
}