⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 class1.cs

📁 C#开发教程 由浅入深 配有实例 是初学者的好帮手
💻 CS
字号:
using System;
using System.Reflection;

namespace AttribUsage
{
	public enum RegHives
	{
		HKEY_CLASSES_ROOT,
		HKEY_CURRENT_USER,
		HKEY_LOCAL_MACHINE,
		HKEY_USERS,
		HKEY_CURRENT_CONFIG
	}

	public enum RemoteServers
	{
		JEANVALJEAN,
		JAVERT,
		COSETTE	
	}

	[AttributeUsage(AttributeTargets.Class)]
	public class RemoteObjectAttribute : Attribute
	{
		public RemoteObjectAttribute(RemoteServers Server)
		{
			this.server = Server;
		}

		protected RemoteServers server;
		public string Server
		{
			get 
			{ 
				return RemoteServers.GetName(
					typeof(RemoteServers), this.server);
			}
		}
	}

	[AttributeUsage(AttributeTargets.Method)]
	public class TransactionableAttribute : Attribute
	{
		public TransactionableAttribute()
		{
		}
	}

	[AttributeUsage(AttributeTargets.Field)]
	public class RegKeyAttribute : Attribute
	{
		public RegKeyAttribute(RegHives Hive, String ValueName)
		{
			this.Hive = Hive;
			this.ValueName = ValueName;
		}

		protected RegHives hive;
		public RegHives Hive
		{
			get { return hive; }
			set { hive = value; }
		}

		protected String valueName;
		public String ValueName
		{
			get { return valueName; }
			set { valueName = value; }
		}
	}

	[RemoteObject(RemoteServers.COSETTE)]
	class SomeClass
	{
		[Transactionable]
		public void Foo() {}

		[RegKey(RegHives.HKEY_CURRENT_USER, "Bar")]
		public int Bar;
	}

	class Test
	{
		[STAThread]
		static void Main(string[] args)
		{
			Type type = Type.GetType("AttribUsage.SomeClass");

			// Class attrib
			foreach (Attribute attr in 
				type.GetCustomAttributes(true))
			{
				RemoteObjectAttribute remoteAttr = 
					attr as RemoteObjectAttribute;
				if (null != remoteAttr)
				{
    				Console.WriteLine(
						"Create this object on {0}.", 
						remoteAttr.Server);
				}
			}


			// Method attrib
			foreach (MethodInfo method in type.GetMethods())
			{
				foreach (Attribute attr in
					method.GetCustomAttributes(true))
				{
					if (attr is TransactionableAttribute)
					{
						Console.WriteLine(
							"{0} is transactionable.", 
							method.Name);
					}
				}
			}

			// Field attrib
			foreach (FieldInfo field in type.GetFields())
			{
				foreach (Attribute attr in 
					field.GetCustomAttributes(true))
				{
					RegKeyAttribute rka = 
						attr as RegKeyAttribute;
					if (null != rka)
					{
						Console.WriteLine(
							"{0} will be saved in"
							+ " {1}\\\\{2}", 
							field.Name, 
							rka.Hive, 
							rka.ValueName);
					}
				}
			}

		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -