2014-06-09 5 views
0

Disons que j'ai la classe d'attribut suivante. Comment puis-je appeler la fonction Updatesomthing à l'intérieur de la classe d'attributs? est l'exemple d'implémentation d'attribut.Comment appeler la fonction dans la classe d'attribut personnalisée

public abstract class Vehicle 
    { 
     //Coode 
    } 

    [CustomAttTest(State.First)] 
    public class Ferrari : Vehicle 
    { 
     //Code 
    } 

Voici le code complet:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var foo = new Ferrari(); 
      //How do i call the UpdateSomething implemented insde the CustomAttTest attribute class? 
     } 
    } 

    public abstract class Vehicle 
    { 
     //Coode 
    } 

    [CustomAttTest(State.First)] 
    public class Ferrari : Vehicle 
    { 
     //Code 
    } 

    //Attribute Implementation 
    public abstract class TestAttribute : Attribute 
    { 
     public abstract void UpdateSomething(string s); 
    } 


    public class CustomAttTest : TestAttribute 
    { 
     private State state; 

     public CustomAttTest(State state) 
     { 
      this.state = state; 
     } 

     public override void UpdateSomething(string s) 
     { 
      if (state.Equals(State.First)) 
      { 
       Console.WriteLine("First State!! " + s); 
      } 
     } 
    } 

    public enum State 
    { 
     First, Second, Third 
    } 


} 
+0

Croyez-moi, j'ai fait beaucoup de lunettes avant de poser cette question. –

Répondre

1

Vous devez utiliser la réflexion:

foo.GetType().GetCustomAttribute<CustomAttTest>().UpdateSomething(...); 

Cependant, vous devriez probablement utiliser une méthode abstraite ou à la propriété au lieu d'un attribut.

+0

merci! fonctionne comme un charme. –

+0

Hey pensez-vous, ce serait une bonne pratique d'ajouter la méthode abstraite à l'intérieur de la classe de véhicule et le remplacement dans Ferrari? –

+0

De même, existe-t-il un moyen d'exécuter la fonction Updatesomthing() lorsqu'il existe plusieurs attributs attribués à customerAttTest? –

Questions connexes