C#기본 범용+반사 조합 활용

4450 단어 C#
내용:
제목과 같다.
목적:
두 가지 예를 완성해야 한다.
1. 반사 가범형을 이용하여 실체류의 속성의 값을 판단하는 상황
2. 반사 범용을 이용하여 DataTatale를 List로 변환하고 List에서 집합된 데이터 값을 판단한다
준비:
콘솔 프로그램 만들기;
Temp 클래스 만들기;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Temp
    {
        public bool A { get; set; }
        public bool B { get; set; }
        public bool C { get; set; }
        public bool D { get; set; }
    }
}

예가 기초적이어서 방법이 따로 만들어지지 않았어요.
작성 시작
1. 반사 가범형을 이용하여 실체류의 속성의 값을 판단하는 상황
현재 Temp 클래스의 속성 값에 False가 있는지 확인해야 합니다.
반사되지 않는 방법으로 작성된 내용은 다음과 같습니다.
if (temp.A && temp.B && temp.C && temp.D)
{
     return true;
}
else
{
     return false;
}

이렇게 작성한 결합성이 너무 높아서, 만약 필드가 많거나 필드를 추가해야 할 때 이 코드를 수정해야 한다면 확장에 불리하다
반사와 범용의 방법으로 고치다
        public static bool IsAllTrue(T obj) where T:class
        {
            Type t = typeof(T);  //    T     
            PropertyInfo[] Proper = t.GetProperties();//    ,   T     
            foreach (var item in Proper)
            {
                bool bol = (bool)item.GetValue(obj,null);//      
                if (!bol)
                {
                    return false;
                }
            }
            return true;
        }

호출 방법
            Temp temp = new Temp()
            {
                A = true,
                B = true,
                C = false,
                D = true
            };
            Console.WriteLine(IsAllTrue(temp).ToString());
            Console.Read();

이렇게 작성하는 장점은 한 종류에만 국한되지 않고 여러 종류를 판단할 수 있으며 후기에 속성을 추가하면 다시 코드를 바꾸지 않아도 되고 코드의 확장성을 높일 수 있다는 것이다.
 
2. 반사 범용을 이용하여 DataTatale를 List로 변환하고 List에서 집합된 데이터 값을 판단한다
실제 개발에서는 DataTable를 List 또는 List를 dataTable로 변환하는 경우가 많습니다.
우리 는 일반적 인 방법 을 하나 더 편찬한다
public static IList DataTableToList(DataTable dt) where T : new()
        {
            //1.  List  
            IList list = new List();
            string TempName = "";
            foreach (DataRow ds in dt.Rows)
            {
                T t = new T(); //    
                PropertyInfo[] Porp = t.GetType().GetProperties(); //         
                foreach (PropertyInfo item in Porp)
                {
                    TempName = item.Name;
                    if (dt.Columns.Contains(TempName))
                    {
                        if (!item.CanWrite) continue;
                        object value = ds[TempName]; //  DataRow  
                        if (value != DBNull.Value)
                        {
                            item.SetValue(t, value, null); //       
                        }
                    }
                }
                list.Add(t);//  List
            }
            return list;
        }

호출 방법
            Temp temp = new Temp()
            {
                A = true,
                B = true,
                C = false,
                D = true
            };
            Console.WriteLine(IsAllTrue(temp).ToString());

            DataTable dt = new DataTable();//  DataTable
            dt.Columns.Add("A", typeof(bool));
            dt.Columns.Add("B", typeof(bool));
            dt.Columns.Add("C", typeof(bool));
            dt.Columns.Add("D", typeof(bool));
            dt.Rows.Add(new object[] { true, true, false, true });
            dt.Rows.Add(new object[] { true, true, true, true });
            dt.Rows.Add(new object[] { true, true, true, true });
            dt.Rows.Add(new object[] { true, true, false, true });
            IList LTemp = DataTableToList(dt);//          List
            int i = 1;
            foreach (Temp item in LTemp)
            {
                bool isbol = IsAllTrue(item);//                 (            ,             DataTable Rows    ,            )
                if (!isbol)
                {
                    Console.WriteLine(" {0}    False", i);
                }
                i++;
            }

            Console.Read();

총괄: 범형과 반사는 C#프로그래밍에서 없어서는 안 된다. 위의 두 가지 예는 간단하게 범형과 반사를 사용할 뿐이다. 범형과 반사의 작용은 매우 크다. 반사와 범형은 C#프로그래밍에서 어디에나 있다고 할 수 있다!

좋은 웹페이지 즐겨찾기