2013-02-28 43 views
4

我有这个类的属性,我想知道如何从类中访问它们。 ServedClassName是一个自定义属性,这是我实际尝试访问的属性。如何在C#中访问其中的类的属性

[Guid("24889af6-e174-460b-ab52-7fb5a925926e")] 
[ServedClassName("ASCOM ProxyClient Telescope")] 
[ProgId("ASCOM.DeviceProxyClient.Telescope")] 
[ClassInterface(ClassInterfaceType.None)] 
public class Telescope : ReferenceCountedObjectBase, ITelescopeV3 

要访问的ProgID,我用这个:Marshal.GenerateProgIdForType(this.GetType());

+2

反射不是一个选项? – allen 2013-02-28 17:18:00

+1

'TypeDescriptor.GetAttributes':http://msdn.microsoft.com/en-us/library/6w3a7b50%28v=vs.100%29.aspx 'Type.GetCustomAttributes':http://msdn.microsoft。 com/en-us/library/system.type.getcustomattributes.aspx – IAbstract 2013-02-28 17:18:07

回答

6
object [] attrs = GetType().GetCustomAttributes(typeof(ServedClassNameAttribute), true); 

会给你类型ServedClassNameAttribute对你的类的自定义属性的列表。然后你可以通过像这样的属性实例:

foreach (ServedClassNameAttribute attr in attrs) 
{ 
    // Do something with attr 
} 
+0

不会使用'(typeof(...),false)'? Visual Studio说它没有过载只是类型。或者我应该在那里? – 2013-02-28 17:22:37

+0

我的不好,我会修复答案。如果从派生类也可能具有属性的类派生,则要使用inherit = true。如果您只关心当前类是否具有属性集而不是其基类,请使用inherit = false。 – 2013-02-28 17:25:07

+0

如果您只是使用'GetCustomAttributes(bool)'(http://msdn.microsoft.com/en-us/library/kff8s254.aspx),则返回当前'Type'实例的所有属性。 – IAbstract 2013-02-28 18:16:07

相关问题