Vra

Ek het 'n persoonlike eienskap wat aan 'n klas toegeken kan word, [FooAttribute].Wat ek graag wil doen, vanuit die eienskap, is om te bepaal watter tipe my eintlik gebruik het.bv.As ek het:

[FooAttribute]
public class Bar
{
}

In die kode vir FooAttribute, hoe kan ek bepaal dit was Bar-klas wat my bygevoeg het?Ek is nie spesifiek op soek na die Bar-tipe nie, ek wil net 'n vriendelike naam stel deur refleksie te gebruik.bv.

[FooAttribute(Name="MyFriendlyNameForThisClass")]
public class Bar
{
}

public class FooAttribute()
{
  public FooAttribute()
  {
    // How do I get the target types name? (as a default)
  }
}
Was dit nuttig?

Oplossing

Eerstens, kan jy die bestaande [DisplayName] vir die behoud van vriendelike name oorweeg. Soos reeds gedek, jy kan eenvoudig nie hierdie inligting in die kenmerk te kry. Jy kan kyk op die kenmerk van Bar, maar in die algemeen, sal die enigste manier om dit te doen uit die kenmerk wees om die tipe in slaag die kenmerk -. D.w.z

[Foo("Some name", typeof(Bar)]

Wat presies is dit wat jy wil doen? Daar is dalk ander opsies ...

Let daarop dat vir i18n, resx, ens; jy kan oorerf DisplayNameAttribute en bied lookup van sleutels deur oorheersende die DisplayName lucky.

Ander wenke

Om uit te brei.'n Eienskap, ingebou of pasgemaak, is net metadata vir 'n klas, of klaslid, en die kenmerk self het geen notasie dat dit met iets geassosieer word nie.

  • Die tipe weet van sy eie metadata
  • Die metadata (in hierdie geval die kenmerk) weet nie aan wie dit behoort nie

Van jou sin "Ek wil net 'n vriendelike naam behulp van besinning stel" Ek dink jy wil die "MyFriendlyNameForThisClass" naam stel om die kenmerk tydens looptyd. indien wel, kan ek nie dink dit is moontlik. Kyk hierdie draad .

Dit is onbeholpe maar jy kan herhaal oor alle klasse in die vergadering, die toets van elk vir die persoonlike kenmerk wat "is" hierdie geval.

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top