2014-04-24 4 views
0

Je débute dans la programmation d'attributs. Je ne sais pas si je pose la bonne question ou non. J'ai une classe de base abstraite (AbstarctBase) et deux classes drivées Derived1 et Derived2. Ma classe AbstartBase possède deux méthodes Method1 et Method2.Programmation d'attribut en C#

Est-il possible d'utiliser la programmation d'attribut de telle sorte que quand je fais

AbstractBase ab= new Derived1(); 

Je ne reçois accès à Method1 et quand je l'utilise Derived2 classe je reçois seulement l'accès à Method2.

Est-ce possible? Si oui, alors pouvez-vous s'il vous plaît me donner un exemple pour commencer.

+3

Qu'est-ce que la "programmation d'attributs"? Quoi qu'il en soit, "Non" - pas comme ça. C'est parce que '' '' '' '' '' '' '' '' '' '' both both * * »est défini pour' 'AbstractBase'» (en tant que telles, toutes les classes dérivées héritent de ces méthodes) Si vous ne le souhaitez que dans une classe dérivée particulière, déclarez-la là. Si vous souhaitez simplement empêcher le code externe de voir les méthodes de base, vous pouvez utiliser des modificateurs de visibilité suffisants - par ex. 'protected'. – user2864740

+1

Dans votre situation, une interface serait mieux, de cette façon, vous pouvez déclarer public les méthodes que vous voulez être visible et prive les cachés – Gusman

Répondre

0

Je pense que vous reliez deux concepts différents d'Inhetitance ou de Polymorphisme et d'attributs. Dans le cas de votre problème, vous pouvez faire en sorte qu'une Inerface possède une méthode et l'implémente différemment dans vos classes de dérivation que d'utiliser le polymorphisme pour invoquer l'implémentation dont vous avez besoin. Par exemple

public interface IBase 
    { 
     void Foo(); 
    } 

    public class Derived1: IBase 
    { 
     public void Foo() 
     { 
     //Print Derived 1 
     } 
    } 

    public class Derived2: IBase 
    { 
     public void Foo() 
     { 
     //Print Derived 2 
     } 
    } 

    public class Program 
    { 
    public static void Main(String args[]) 
    { 
     IBase base=new Derived1(); 
     base.Foo();//This prints Derived 1 
     base=new Derived2(); 
     base.Foo();//This prints Derived 2 
    } 
    } 

Où que les attributs en C# sont utilisés pour attacher des métadonnées à vos classes ou les membres de la classe, ainsi que lors de l'application d'un comportement commun sans avoir à mettre en œuvre une certaine interface pour chaque unité qui partage le comportement. Ils sont utilisés comme celui-ci

[MyAttribute] 
    public class MyClass 
    { 
     //Class body 
    } 

Vous devez appeler l'attribut en utilisant la méthode GetCustomAttribute() sinon il ne fera rien. Pour plus d'informations sur les attributs s'il vous plaît se référer à cet article http://www.codeproject.com/Articles/2933/Attributes-in-C Espérons que cela vous hepls.