C#-Funktionen + Reflektion (durch Reflektion zum Durchlaufen der Eigenschaften von Klassen und Methoden) + Attribute

Features: C#-Features (Attribut) – Blog von Cold Evening Wind – CSDN-Blog

Reflexion: Erstellen Sie dynamisch Objektinstanzen von gekapselten Assemblys, Modulen und Typen, binden Sie Typen an vorhandene Objekte, rufen Sie Typen von vorhandenen Objekten ab und rufen Sie dann Methoden für Typen auf oder greifen Sie auf deren Felder und Eigenschaften zu

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace AtrributeTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            HelpAttribute help;
            foreach(HelpAttribute attr in typeof(MyClass).GetCustomAttributes(true))//遍历类的属性
            {
                help = attr;
                if(help != null)
                {
                    Console.WriteLine("Description:{0}",help.Description);
                    Console.WriteLine("Name:"+ help.Name);
                    Console.WriteLine("Age:{0}",help.Age);
                }
            }
            foreach (System.Reflection.MethodInfo methods in typeof(MyClass).GetMethods())//遍历类下面的所有方法
            {
                foreach(Attribute methodAttr in methods.GetCustomAttributes(true))//遍历方法的所有属性
                {
                    HelpAttribute temp = methodAttr as HelpAttribute;
                    if (temp != null)
                    {
                        Console.WriteLine("Description:{0}", temp.Description);
                        Console.WriteLine("Name:" + temp.Name);
                        Console.WriteLine("Age:{0}", temp.Age);
                    }
                }
            }
            Console.ReadKey();
        }
    }
    //自定义Attribute标签
    //AllowMultiple在这里表示同一个类上是否只能放一个Attribute
    //Inherited表示Class被继承的时候,是否继承Attribute
    [AttributeUsage
    #region
        (AttributeTargets.Class |
        AttributeTargets.Method,
    #endregion
        AllowMultiple = true,Inherited =false)]
    public class HelpAttribute : System.Attribute
    {
        private string name;
        private int age;
        public string description;
        public HelpAttribute(string name,int age)
        {
            this.name = name;
            this.age = age;
        }
        public string Name
        {
            get { return this.name; }
        }
        public int Age
        {
            get { return this.age; }
        }
        public string Description
        {
            set { this.description = value; }
            get { return this.description; }
        }
    }
    //给MyClass加上了自定义的Attribute标签信息
   [HelpAttribute("Peter",18,Description = "this is a class")]
    public class MyClass
    {
        [HelpAttribute("ZhangSan", 19, Description = "set course and score")]
        public void setClass()
        {
        }
        [HelpAttribute("LiSi", 20, Description = "display course and score")]
        public void getClass()
        {
        }
    }
}

Weitere C#-Reflexionsmechanismen und -methoden: C#-Reflexionsmechanismen und -methoden_c#reflection-Erfassungsmethoden_Phil Arists Blog-CSDN-Blog

Eigenschaften: Verwenden Sie Eigenschaftsaccessoren, um private Eigenschaften in einer Klasse oder Struktur abzurufen oder festzulegen

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ProPertyTest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Student student = new Student();
            student.Name = "张三";
            student.Age = 12;
            Console.WriteLine($"Student Info:{student}");
        }
    }
    class Student
    {
        private string id="20230405";
        private string name;
        private int age;
        //只读的访问器
        public string Id
        {
            get { return id; }
        }
        //可读可写的访问器
        public string Name
        {
            set { name = value; }
            get { return name; }
        }
        //只写的访问器
        public int Age
        {
            set { age = value; }
        }
        public override string ToString()
        {
            return $"id:{Id},name:{Name}"; //无法只读Age的值
        }
    }
}

Fazit: Der Baum, der umarmt, entsteht am Ende der Haare; die neunstöckige Plattform beginnt auf dem Erdhaufen; die Reise von tausend Meilen beginnt mit einem einzigen Schritt.

Ich denke du magst

Origin blog.csdn.net/falsedewuxin/article/details/129969821
Empfohlen
Rangfolge