2010-01-15 5 views
1

Actuellement j'utilise .Net 3.0 mais je ne comprends pas comment utiliser les propriétés automatiques. Par exemple, si je veux écrire cet exemple de code via Authomatic Properties, que dois-je faire?Propriétés automatiques Problème

private string _name = string.Empty; 
private string _family = string.Empty; 
//A field with default value 
private DateTime _releaseDate = System.DateTime.Now; 


//ReadOnly Property 
public string Name 
{ 
    get {return _name; } 
} 

//enforce validation rules on setting 
public string Family 
{ 
    get { _family; } 
    set 
    { 
     if (value.Length < 3) 
      return new Exception("Family need at least 3 character long"); 
     else 
      _family = value; 
    } 
} 

// A property from two other fields 
public string FullName 
{ 
    get { return _name + " " + _family; } 
} 

Merci à tous pour votre réponse, je suis ma réponse

Répondre

6

Vous ne pouvez pas. Une propriété automatique crée simplement un champ de sauvegarde privé pour vous, et le cache de votre part. Si vous devez avoir une logique dans votre propriété, vous devez l'implémenter vous-même.

Avec des propriétés automatiques, vous devez avoir à la fois un getter et un setter, mais vous pouvez faire le par exemple privé setter:

public string Foo { get; private set; } 

Par ailleurs, vous ne pouvez pas retour une exception d'une propriété de chaîne . Les exceptions doivent être levée, et non a renvoyé.

public string Family 
{ 
    get { _family; } 
    set 
    { 
     if (value.Length < 3) 
      return new Exception("Family need at least 3 character long"); 
     else 
      _family = value; 
    } 
} 

Cela devrait probablement lire:

public string Family 
{ 
    get { _family; } 
    set 
    { 
     if (value.Length < 3) 
      throw new Exception("Family need at least 3 character long"); 
     else 
      _family = value; 
    } 
} 
+0

vous .Oui Merci, vous avez raison bien sûr que je devrais jeter, je viens d'écrire sans compilation et de test. Quel est l'avantage de faire un setter privé comme vous l'avez dit? – Mostafa

+1

Cela signifie que seule cette classe peut définir la valeur; les valeurs ne peuvent donc pas être modifiées par d'autres classes. Par conséquent, vous pouvez l'utiliser pour créer des objets immuables. Voir http://msdn.microsoft.com/en-us/library/bb383979.aspx –

3

Vous dites que vous utilisez .NET 3.0 - utilisez-vous VS2005? Si c'est le cas, vous utilisez C# 2 qui ne supporte pas les propriétés implémentées automatiquement. Si vous utilisez VS2008 et que vous ciblez .NET 3.0, ils devraient fonctionner correctement - mais ils ne seraient pas applicables dans ce cas, car aucune de vos propriétés ne sont des propriétés "triviales". propriétés automatiquement mises en œuvre sont un moyen compact de l'écriture:

private string foo; 
public string Foo { get { return foo; } set { foo = value; } } 

Si votre propriété ne suit pas ce modèle (modulo modificateurs d'accès pour la propriété), alors les propriétés automatiques ne vous aidera pas.

2

Les propriétés automatiques sont utilisées lorsque vous voulez simplement qu'une propriété répète un champ de support.

à savoir

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

peut simplement être réécrite comme

public string Name { get; set; } 

le compilateur étend un champ de support privé nommé de façon aléatoire pour vous et écrit code équivalent au premier exemple de code.

Cependant, si vous voulez faire quelque chose de spécial, comme une valeur par défaut, ou valider un ensemble value, vous ne pouvez pas les utiliser.

L'exception possible, en fait, est l'initialisation par défaut.

Vous pouvez utiliser un constructeur pour initialiser les propriétés par défaut.

3

Vous ne pouvez pas.La propriété automatique ne peut pas être en lecture seule et ne peut pas contenir de logique dans le corps.

propriété automatique est juste une forme courte de ce

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

Pour ce

public string Name{get;set;} 
Questions connexes