2010-09-23 4 views
2

J'ai une classe de base, FooBase. Il y a quelques propriétés standard de lecture/écriture. Quand je sous-classe ceci, je veux que la sous-classe ait seulement des propriétés de lecture. Est-ce possible?Masquage de l'accesseur Set

class FooBase 
{ 
    public virtual int ID{get; set;} 
    public virtual string Name{get;set;} 
} 

class Foo : FooBase 
{ 
    public override int ID {get;} 
    public override string Name{get;} 
} 

Je sais que le travail ne marche pas de code, mais il peut vous donner une idée de ce que im après

Merci!

Répondre

1

Non. Vous avez votre hiérarchie de classe à l'envers.

La version accessible en écriture doit être une sous-classe de la version en lecture seule. Voici une façon que vous pouvez le faire:

class FooBase 
{ 
    public int ID { get; protected set; } 
    public string Name { get; protected set; } 
} 

class Foo : FooBase 
{ 
    public void SetId(int id) { /* ... */ } 
    public void SetString(string name) { /* ... */ } 
} 
+0

Merci, pouvez-vous me donner un exemple de la façon dont je pourrais le faire? Im ayant une journée massivement blonde aujourd'hui ... – TerrorAustralis

2

Vous ne pouvez pas supprimer tout membre du public comme ça, ou ça casse tout ce qui tente de traiter un objet Foo comme un objet FooBase.

Vous pouvez essayer quelque chose comme ceci:

public virtual string Name{get; protected set;} 

Faire le setter uniquement aux classes dérivées de FooBase.