2011-02-27 14 views
6

Sınıf örneği oluşturmak için getters ve setters kullanıyorum.Yalnızca set/getter'de ayarlamayı belirtme

Özel bir değişkene sahip olmaksızın ayarlanan değeri ayarlamak ve doğrudan türünde yapmak mümkün mü?

public class Cat() 
{ 
public String Age{get; set; } 
} 

ve bunu yaparken örneğini istiyorum:

Örneğin benim sınıf ise ben ondan önce aramak istediğiniz bir işlev çağrıldığında ConvertToHumanYears varsa,

new Cat({Age: "3"}); 

Şimdi depolanıyor, bunun gibi bir şey hayal ediyorum:

public class Cat() 
{ 
public String Age{get; set{ value = ConvertToHumanYears(value); } 
} 

Ancak yukarıdaki (bir d çok dirivatifler) hataları döndürmek için görünüyor. Ayarladığım ek bir özel değişkene sahip olmak zorunda kalmadan benzer bir şey yapmak mümkün mü?

+0

:

Ardından değeri ayarı sağlayan bir yapıcı oluşturabilirim? – ctacke

cevap

17

Otomatik bulucuyu getter için kullanamazsınız ve ayarlayıcı tanımına sahip olamazsınız.

öyle ya

public class Cat() 
{ 
    public String Age{get; set; } 
} 

veya bu konuda

public class Cat() 
{ 
    private String _age; 

    public String Age{ 
     get{ 
      return _age; 
     } 
     set{ 
      _age = ConvertToHumanYears(value); 
     } 
    } 
    } 

} 
+0

ah, sahip olduğum şey, ama özel bir değişken eklenmeden temiz olmasını umuyordum :( – Steve

+1

Bunun için Derleyici, aslında çalışma zamanında anında özel değişkeni yaratıyor, bu yüzden onu karıştıramazsınız. @StackOverFlowException doğrudur. –

2

nasıl?

public class Cat 
{ 
    public string Age { get; private set; } 
} 

Sen ayarlayıcı olması gerekiyor, ancak yalnızca sınıfın kendisi içeride çağrılabilir bu. Bu VB gibi bir çok neden C# olarak etiketlemek görünüyor

public Cat(string age) 
{ 
    Age = age; 
} 

veya

public Cat(string age) 
{ 
    Age = ConvetToHumanYears(age); 
} 
İlgili konular