2010-09-29 5 views
13

Zauważyłem właściwości Tag z kontrolkami. Czy można używać tego do odwoływania się do moich obiektów niestandardowych, czy też powinienem trzymać się z dala od niego, ponieważ wymagałoby to boksowania i rozpakowywania, które zostały wymienione jako niebezpieczne i nie są polecane.Co to jest właściwość Tag w .net

TreeNode tn = new TreeNode(); 
CustClass o = new CustClass() 
o.number = 123; 
tn.Tag = o; 

class CustClass 
{ 
    public int number {get; set;} 
} 
+1

Dobrym miejscem na rozpoczęcie: [MSDN odniesienie Tag] (http://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx) – NullUserException

+0

dlaczego oznaczać, że fora programowania langauge? całkowicie niezwiązane. – TomTom

+4

@ TomTom - ponieważ kod, który podał, jest napisany w języku C#? Co to jest, do cholery, 'net-winforms'? Przywracając ... –

Odpowiedz

30

Celem usługi Tag jest użycie jej w dowolnym celu. Możesz bezpiecznie przechowywać wszystko, co chcesz.

Zwyczajowo należy zadeklarować klasę, która jest przeznaczona do przechowywania w obiekcie Tag (podobnie jak w przypadku użytkownika CustClass). Ale jeśli potrzebujesz tylko jednej wartości, to nie ma nic złego w przechowywaniu w nim bezpośrednio kodu int.

Gdzie przeczytałeś, że boks/odpakowanie jest "niebezpieczne"? To absolutnie nie jest prawdą. (Niektórzy twierdzą, że jest to nieefektywne, ale nawet to nie jest prawdą.) Co więcej, twój kod nawet nie zawiera wcale przykładu boksowania. CustClass to typ odniesienia. Tylko typy wartości są oznaczone ramkami, gdy są przypisane do object.

+4

Rozpakowywanie jest nieefektywne, gdy jest używane w dużych ilościach, ale w przypadku jednej z nich w kontroli jest mało prawdopodobne, że zostanie zauważone. –

2

Nie sądzę, że byłby to problem związany z boksowaniem lub rozpakowywaniem, aby używać go tak, jak chcesz. O ile mi wiadomo, ta właściwość Tag jest przeznaczona wyłącznie dla programisty, więc można jej używać w taki sposób, w jaki jest ona potrzebna.

Proszę zobaczyć właściwość Control.Tag na witrynie MSDN, aby uzyskać dalsze informacje na temat korzystania z tej właściwości.

Na przykład użyłem go do wprowadzenia instrukcji dla użytkownika w aplikacjach Windows Forms. Po wywołaniu zdarzenia GotFocus sterowania instrukcją Label.Text została przypisana wartość mojej właściwości Tag kontrolny, która zawierała ciąg instrukcji.

0

Od linki wspomniano również przez innych tutaj:

na https://msdn.microsoft.com/en-us/library/system.windows.forms.control.tag.aspx jeden brzmi:

Każdy typ wywodzi się z klasy Object można przypisać do tego nieruchomości. Jeśli właściwość Tag została ustawiona za pomocą projektanta Windows Forms , można przypisywać tylko tekst.

Typowym zastosowaniem właściwości Tag jest przechowywanie danych bliskich związanych z formantem. Na przykład, jeśli masz kontrolę, że wyświetla informacje o kliencie, możesz zapisać zestaw danych, który zawiera historię zamówień klienta w tej właściwości znacznika kontrolki , dzięki czemu można uzyskać szybki dostęp do danych.

i na https://msdn.microsoft.com/en-us/library/system.windows.forms.treenode.tag.aspx jeden brzmi:

... przykład tworzy korzeń drzewa węzeł przypisania węzłów drzewa dziecku. Węzeł drzewa podrzędnego dla każdego obiektu klienta w tablicy ArrayList jest dodawany do węzła drzewa głównego, a także węzła drzewa podrzędnego dla każdego obiektu zamówienia przypisanego do obiektu klienta. Obiekt Customer jest przypisany do właściwości Tag, a węzły drzewa reprezentujące obiekty Klienta to wyświetlane z tekstem pomarańczowym.Ten przykład wymaga zdefiniowania klienta i zamówienia o wartości , formantu TreeView w formularzu oraz obiektu o nazwie CustomerArray, który zawiera obiekty Customer o nazwie ArrayList.