zoukankan      html  css  js  c++  java
  • 反射实例

    实例

    StudentInfo
    public class StudentInfo
        {
            public StudentInfo()
            {
    
            }
            public StudentInfo(string nickName)
            {
                _nickName = nickName;
            }
    
            public StudentInfo(int age)
            {
                Age = age;
            }
    
    
            private string _nickName = "张三";
    
            private bool _isfriend = true;
    
            public bool IsFriend
            {
                get { return _isfriend; }
                set { _isfriend = value; }
            }
    
    
            public int Age { get; set; }
    
            public string NickName
            {
                get
                {
                    if (_isfriend)
                    {
                        return _nickName;
                    }
                    else
                    {
                        return "任我行";
                    }
                }
                set { _nickName = value; }
            }
    
            /*
             * ToString,GetHashCode,GetType(),Equeal
             */
    
            public void Run()
            {
                Console.WriteLine($"{_nickName}我正在跑步...");
            }
        }
    Console.WriteLine("************获取所有属性************");
                    //获取类型
                    Type t = typeof(StudentInfo);
                    var props = t.GetProperties();
                    foreach (var propertyInfo in props)
                    {
                        Console.WriteLine(propertyInfo.Name);
                    }

    效果:

    Console.WriteLine("
    ************获取所有方法************
    ");
                    /*
                     * 1.获取类型
                     * 2.GetMethods()
                     * 3.不包含构造方法
                     */
                    var t = typeof(StudentInfo);
                    var methods = t.GetMethods();
                    foreach (var methodInfo in methods)
                    {
                        Console.WriteLine(methodInfo.Name);
                    }
    
                    Console.WriteLine(methods.Length);

    Console.WriteLine("
    ************获取类型名称************
    ");
                    var t = typeof(StudentInfo);
                    Console.WriteLine(t.Name);
                    Console.WriteLine(t.FullName);//包含命名空间

    Console.WriteLine("
    ************获取字段************
    ");
                    var t = typeof(StudentInfo);
                    var fields = t.GetFields(BindingFlags.NonPublic | BindingFlags.Instance);
                    foreach (var fieldInfo in fields)
                    {
                        Console.WriteLine(fieldInfo.Name);
                    }

    Console.WriteLine("
    ************调用构造函数************
    ");
                    var t = typeof(StudentInfo);
                    Type[] types = new Type[1];
                    types[0] = typeof(string);//表示要获取参数类型为String的构造函数
                    var cons = t.GetConstructor(types);
                    //调用构造函数,并给构造传递参数值
                    var student = cons.Invoke(new object[] { "任我行" }) as StudentInfo;
                    Console.WriteLine(student.NickName);

    Console.WriteLine("
    ************调用方法************
    ");
                    /*
                     * 1.获取类型
                     * 2.创建对象
                     * 3.调用方法
                     */
                    var t = typeof(StudentInfo);
                    object obj = Activator.CreateInstance(t, 999);
                    var methodInfo = t.GetMethod("Run"); //获取需要调用的方法名称
                    methodInfo.Invoke(obj, null);//调用Run方法,指定方法在哪个对象下被调用,null参数表示此方法是无参方法

    Singleton

    public class Singleton
        {
            private string _nickName;
            public Singleton(string nickName)
            {
                _nickName = nickName;
            }
    
            public string NickName => _nickName;
    
            private void Run()
            {
                Console.WriteLine($"我是{_nickName},这是私有跑步方法");
            }
        }
    Console.WriteLine("
    ************调用私有方法************
    ");
                    //黑科技
                    var t = typeof(Singleton);
                    var obj = Activator.CreateInstance(t, "天道无情");
                    var methodInfo = t.GetMethod("Run", BindingFlags.NonPublic | BindingFlags.Instance); //获取需要调用的方法名称
                    methodInfo.Invoke(obj, null);//调用私有方法

    Console.WriteLine("
    ************加载程序集************
    ");
                    Assembly assembly = Assembly.Load("反射");
                    Type t = assembly.GetType("反射.StudentInfo");
                    var obj = Activator.CreateInstance(t, "天道无情");
    
                    var methodInfo = t.GetMethod("Run");
                    methodInfo.Invoke(obj, null);//调用

    Console.WriteLine("
    ************反射给属性赋值************
    ");
                    var t = typeof(StudentInfo);
                    object obj = Activator.CreateInstance(t, 999);//创建对象
                    var p = t.GetProperty("NickName");
    
                    p.SetValue(obj, "范涛涛");//设置指定对象obj属性值
                    var val = p.GetValue(obj);//获取指定对象obj属性值
                    Console.WriteLine(val);

    配置文件中添加

    <connectionStrings>
        <add name="Default" connectionString="server=127.0.0.1;database=WeekCodeFirst;uid=test1608;pwd=123456" providerName="System.Data.SqlClient"/>
      </connectionStrings>
    public class DbHelper<T>
        {
            private static readonly string _connString = ConfigurationManager.ConnectionStrings["Default"].ConnectionString;
            //新增
            public int Insert(T model)
            {
                int result = 0;
                var t = typeof(T);
                using (SqlConnection conn = new SqlConnection(_connString))
                {
                    conn.Open();
                    string strSql = "insert into 表名(字段1,字段2,字段3) values(@字段1,@字段2,@字段3)";
                    StringBuilder sql = new StringBuilder();//用于字符串拼接的类
                    sql.Append($"Insert into {t.Name}(");
                    var props = t.GetProperties().ToList();
                    props.RemoveAt(0);//移除了主键
                    var names = props.Select(p => p.Name).ToList();
                    sql.Append(string.Join(",", names));//将类型的所有属性用","号隔开,如:属性1,属性2....
                    sql.Append($") values(@{string.Join(",@", names)})");
                    result= conn.Execute(sql.ToString(),model);
                }
                return result;
            }
        }

    CourseInfo

    public class CourseInfo
        {
            public int Id { get; set; }
            public string CourseName { get; set; }
            public int TeacherId { get; set; }
    
        }
    Console.WriteLine("
    ************反射抽象添加数据************
    ");
                    DbHelper<CourseInfo> helper = new DbHelper<CourseInfo>();
                    CourseInfo info = new CourseInfo()
                    {
                        Id = 899,
                        CourseName = "C#高级开发",
                        TeacherId = 22
                    };
                    helper.Insert(info);
  • 相关阅读:
    UVa 12174 (滑动窗口) Shuffle
    UVa 1607 (二分) Gates
    CodeForces ZeptoLab Code Rush 2015
    HDU 1525 (博弈) Euclid's Game
    HDU 2147 (博弈) kiki's game
    UVa 11093 Just Finish it up
    UVa 10954 (Huffman 优先队列) Add All
    CodeForces Round #298 Div.2
    UVa 12627 (递归 计数 找规律) Erratic Expansion
    UVa 714 (二分) Copying Books
  • 原文地址:https://www.cnblogs.com/lhl123/p/10643382.html
Copyright © 2011-2022 走看看