2016-08-09 17 views
5

Ben özel ayarlayıcı oluşturmak ve aynı zamanda otomatik gaz giderici tutmak istediğiniz bir özelliği olan bir nesne vardır:Özel setter ancak otomatik alıcı

public class SomeObject 
{ 
    public int SomeProp { get; set; } 
    public Nullable<short> MyProp 
    { 
     get 
     { 
     return MyProp; 
     } 
     set 
     { 
     if (value != null) 
     { 
      SomeProp = SomeWork(value); 
      MyProp = value; 
     } 
     } 
    } 
} 

Sorun gaz giderici bir Stackoverflow hatası alıyorum olmasıdır . Alıcıyı olduğu gibi tuttuğum bir özelliği nasıl uygularım?

+13

Yapamazsınız. Bir alana ihtiyacın var. – SLaks

+0

Bu durumda, bir 2. alana ihtiyacınız var. Aksi halde, geter – mmcrae

+3

'da sonsuz bir döngü elde edersiniz, aldırmam, tüm downvotes ile neler? – Steve

cevap

5

Mülkünüz için bir arka alan kullanmanız gerekir. Sonsuz bir özyinelemeyle sonuçlanan kendi alıcınızdaki MyProp özelliğinize özyinelemeli atıfta bulunduğunuz için bir SO hatası alıyorsunuz.

private short? _myProp; 

public short? MyProp 
{ 
    get 
    { 
     return _myProp; 
    } 
    set 
    { 
     if (value != null) 
     { 
      SomeProp = SomeWork(value); 
      _myProp = value; 
     } 
    } 
} 
+0

Teşekkürler; Daha önce hiç bu kenar kasetini almadım. – frenchie

+0

Otomatik uygulanmış özellikler kullandığınızda bile, otomatik olarak sizin için oluşturulan örtülü bir yedekleme alanı vardır. –

2

Özel durumunuz var, çünkü mülkünüzde esasen sonsuz bir özyineleme yapıyorsunuz.

Ne yazık ki, C# 'da tanımlamanız gereken şey, destek alanını kendiniz tanımlamanız gerekiyor.

+0

Hiç uygulanacak mı? Merak ediyorum ... –

+0

@roryap Ben öyle düşünmüyorum ve bunu uygulamak için bir mantık/fayda görmüyorum. – Rahul

+0

@roryap İnşallah sonunda yapar, belki biraz saplantılıyım ama her zaman biraz fazladan alana sahip olmak zorunda kalmamı isterdim. Şu anda bunun hakkında düşünmeme rağmen, bununla ilgili problem, özel bir uygulama yaptıktan sonra, değerin aslında nereden geldiğine dair bir garanti olmadığıdır. – EJoshuaS

1

Bunu yapamazsınız. Özel getter ayarlayıcıları (her ikisi de, tek değil) kullanıyorsunuz veya otomatik alıcılara bağlı kalıyorsunuz. Evinizin kodunuzu gaz giderici olarak

(vesaire vesaire aynı alıcı ve erişmek için gidiyor) kendisinin tutucuyu erişmeye çalışıyor

Yani hepsi mahvedecek sonsuz döngü var dünya ve insanlığın sonunu getirin

1

Hayır, bu mümkün değil. Ya bir auto özelliğini (OR) tam olarak getter ve setter tanımladığından, derleyici sizin için bir tane oluşturmayacağından destek alanını sağlamanız gerekir.

İlgili konular