Thao tác với class qua Reflection trong WPF

Tạo instance, lấy giá trị, thay đổi giá trị của property, thực hiện phương thức qua reflection (dùng tên lớp, tên thuộc tính dạng chuỗi).

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.Remoting;
using System.Text;
using System.Threading.Tasks;

namespace testReflection
{
    class Program
    {
        static void Main(string[] args)
        {
            // Tạo đối tượng từ lớp MyClass - đối tượng trong p.
// CreateInstance nhận 02 tham số: Project name (testReflection)
// và Class name đầy đủ dạng NameSpace.ClassName (testReflection.MyClass)
            ObjectHandle handle = Activator.CreateInstance("testReflection", "testReflection.MyClass");
            Object p = handle.Unwrap();

            Console.WriteLine("Type: {0}", p.GetType().Name);

            // Truy cập thuộc tính
            Type t = p.GetType();
            PropertyInfo prop = t.GetProperty("Name");
            if (prop != null)
            {
                prop.SetValue(p, "This is the Name property value"); // thay đổi giá trị thuộc tính Name
                Console.WriteLine("Name: {0}", prop.GetValue(p));
            }
            prop = t.GetProperty("Birthdate");
            if (prop != null)
            {
                prop.SetValue(p, new DateTime(2009, 1, 1)); // thay đổi thuộc tính Birthdate
                Console.WriteLine("Birthdate: {0}", prop.GetValue(p));
            }

            // Truy cập phương thức
            MethodInfo method = t.GetMethod("ToString");
            Object retVal = method.Invoke(p, null); // thực hiện phương thức ToString
            if (retVal != null)
                Console.WriteLine(retVal);

            method = t.GetMethod("Age");
            retVal = method.Invoke(p, new object[] { new DateTime(2015, 1, 1) }); // thực hiện phương thức age với tham số là năm 2015
            if (retVal != null)
                Console.WriteLine("Age: {0}", retVal);

            Console.ReadKey();
        }

    }

    class MyClass
    {
        public int ID { get; set; }
        public string Name { get; set; }
        public DateTime Birthdate { get; set; }

        public override string ToString()
        {
            return "The ToString method is executed!";
        }

        public string Age(DateTime date)
        {
            return (date.Subtract(Birthdate).Days / 365).ToString("#");
        }
    }
}

Kết quả:

Type: MyClass
Name: This is the Name property value
Birthdate: 01/01/2009 12:00:00 SA
The ToString method is executed!
Age: 6

Advertisements

Trả lời

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Đăng xuất /  Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Đăng xuất /  Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Đăng xuất /  Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Đăng xuất /  Thay đổi )

Connecting to %s