Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Προσθήκη attribute μέσω κληρονομικότητας.

Îåêßíçóå áðü ôï ìÝëïò xabikos. Τελευταία δημοσίευση από το μέλος xabikos στις 28-09-2009, 14:11. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  28-09-2009, 13:09 54029

    Προσθήκη attribute μέσω κληρονομικότητας.


    Αντιμετωπίζω το εξής πρόβλημα. Θέλω να προσθέσω μέσω κληρονομικότητας ένα attribute σε ένα property ενός αντικειμένου που κληρονομεί από κάποιο base class το οποίο όμως έχεις ήδη κάποιο attribute στο base class. Αυτό που θέλω να πετύχω είναι να ισχύουν και τα δυο attributes χωρίς να πρέπει να γράψω ξανά αυτό του base class. Για να γίνω πιο συγκεκριμένος έστω ότι έχουμε την εξής κλάση που είναι η βασική

    public class NamedEntity  {
    
    		[DataMember]
    		[StringLength(250)]
    
    		public virtual string Description {
    			get ;
    			set ;
    		}
    }
    και έχουμε και την εξής κλάση

    public class RequiredNamedEntity : NamedEntity {
    		
    		[Required]
    		public override string Description {
    			get {
    				return base.Description;
    			}
    			set {
    				base.Description = value;
    			}
    		}
    	
    }
    Όταν γίνεται έτσι απλά δεν ισχύουν τα attributes του NamedEntity. Υπάρχει κάποιος τρόπος;
    Έψαξα στο internet αλλά δεν μπόρεσα να καταλαβώ ακριβώς αν γίνεται αυτό που θέλω γι αυτό ρωτάω και εδώ.

    My dream is to fly over the rainbow so high!!!!
  •  28-09-2009, 13:38 54033 σε απάντηση της 54029

    Απ: Προσθήκη attribute μέσω κληρονομικότητας.

    Ρίξε μια ματιά στην ενότητα "Defining or Controlling Usage of Our Attribute" σ' αυτό το άρθρο. Φαντάζομαι ότι αναφέρεσαι σε custom attributes.
    Ακόμα κι ένας άνθρωπος μπορεί ν' αλλάξει τον κόσμο. Μη θέλεις να κυβερνήσεις. Απλά δείξε το μονοπάτι κι ο κόσμος θ' ακολουθήσει!!
  •  28-09-2009, 13:48 54035 σε απάντηση της 54029

    Απ: Προσθήκη attribute μέσω κληρονομικότητας.

    Το [DataMember] attribute δεν ειναι Inherited πρέπει να το ξαναγράψεις.

    Check και για τα άλλα.

  •  28-09-2009, 13:58 54036 σε απάντηση της 54035

    Απ: Προσθήκη attribute μέσω κληρονομικότητας.

    Το θέμα είναι λίγο πιο περίπλοκο. Τα StringLengthAttribute και DataMemberAttribute ορίζονται από το ίδιο το .NET, δεν μπορούν να ξαναγραφούν. Αν βέβαια ο xabikos αναφέρεται σε αυτά.

    Αυτό που λένε και ο Markos και ο gtas έχει να κάνει με το Inherited attribute. Όταν φτιάχνεις ένα custom attribute ορίζεις πως θα χρησιμοποιηθεί μέσω του AttributeUsage. Μεταξύ των άλλων, ορίζεις και αν θα γίνεται inherit σε subclasses και overriden members ή όχι. Το default είναι true, που σημαίνει ότι ΟΛΑ τα custom attributes γίνονται inherit εκτός και αν ζητήσει το αντίθετο ο δημιουργός τους. Το DataMemberAttribute έχει το Inherit=False.

    Μάλλον θα πρέπει να μας εξηγήσει ο xabikos τί θέλει να κάνει για να βγει μία άκρη. Εφόσον τα StringLength, Required και DataMember βρίσκονται στο DataAnnotations namespace υποθέτω ότι θέλει να κάνει κάτι σχετικό με ASP.NET Dynamic Data. Τί ακριβώς θέλεις να κάνεις?


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  28-09-2009, 14:11 54037 σε απάντηση της 54036

    Απ: Προσθήκη attribute μέσω κληρονομικότητας.


    Δεν θέλω να κάνω κάτι με δικά μου attributes. Θέλω να χρησιμοποιήσω ακριβώς τα attributes που έγραψα και στο παράδειγμα. Επειδή υπάρχει ήδη μια ιεραρχία από κλάσεις θέλω αν γίνεται να μην ξαναγράφω τα ίδια πράγματα όσο αυτό είναι εφικτό. Δηλαδή στο NamedEntity θέλω να ελέγχω μόνο για το μέγεθος του Property και στο RequiredNamedEntity να ελέγχω και το μέγεθος αλλά και το ότι θα δοθεί κάποια τιμή. Τώρα βέβαια αφού το DataMember πρέπει να γραφτεί ξανά δεν υπάρχει άλλος τρόπος. Η εφαρμογή που δουλεύω είναι σε Silverlight και θέλω να χρησιμοποιήσω το DataForm Control γι αυτό και τα συγκεκριμένα attributes.

    My dream is to fly over the rainbow so high!!!!
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems