Let's take this sample class:
// ------------------------------------------------------------------------
public class Customer
{
// ----------------------------------------------------------------------
[Category( "Editable Values" ), LocDescription( "FirstName", "Sets the first name..." )]
public string FirstName { get; set; }
// ----------------------------------------------------------------------
[Category( "Editable Values" ), LocDescription( Key = "LastName", DefaultDescription = "Sets the last name..." )]
public string LastName { get; set; }
} // class Customer
Now you can implement a custom attribute class:
// ------------------------------------------------------------------------
public class LocDescriptionAttribute : DescriptionAttribute
{
// ----------------------------------------------------------------------
public LocDescriptionAttribute()
{
} // LocDescriptionAttribute
// ----------------------------------------------------------------------
public LocDescriptionAttribute( string key, string defaultDescription ) :
base( defaultDescription )
{
Key = key;
DefaultDescription = defaultDescription;
} // LocDescriptionAttribute
// ----------------------------------------------------------------------
public string Key { get; set; }
// ----------------------------------------------------------------------
public string DefaultDescription { get; set; }
// ----------------------------------------------------------------------
public override string Description
{
get
{
// load from resx
string description = Strings.GetString( Key );
if ( string.IsNullOrEmpty( description ) )
{
description = DefaultDescription;
}
return description;
}
} // Description
} // class LocDescriptionAttribute
Now you have the localized description:
AttributeCollection attributes = TypeDescriptor.GetProperties( customer )[ "FirstName" ].Attributes;
DescriptionAttribute myAttribute = (DescriptionAttribute)attributes[ typeof( DescriptionAttribute ) ];
ConsoleWiterLine( myAttribute.Description );