C#에선
- 프로그램 실행 도중에 객체의 정보를 조사하거나
- 다른 모듈에 선언된 인스턴스를 생성하거나
- 기존 개체에서 형식을 가져오고 해당하는 메소드를 호출, 또는 해당 필드와 속성에 접근
위 3개지 기능을 제공하는 "리플렉션"이 존재
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Threading.Tasks;
namespace ConsoleApplication43
{
class Animal
{
public int age;
public string name;
public Animal(string name, int age)
{
this.age = age;
this.name = name;
}
public void eat()
{
Console.WriteLine("먹는다!");
}
public void sleep()
{
Console.WriteLine("잔다!");
}
}
class Program
{
static void Main(string[] args)
{
Animal animal = new Animal("고양이", 4);
Type type = animal.GetType();
ConstructorInfo[] coninfo = type.GetConstructors();
Console.Write("생성자(Constructor) : ");
foreach (ConstructorInfo tmp in coninfo)
Console.WriteLine("\t{0}", tmp);
Console.WriteLine();
MemberInfo[] meminfo = type.GetMethods();
Console.Write("메소드(Method) : ");
foreach (MethodInfo tmp in meminfo)
Console.Write("\t{0}", tmp);
Console.WriteLine();
FieldInfo[] fieldinfo = type.GetFields();
Console.Write("필드(Field) : ");
foreach (FieldInfo tmp in fieldinfo)
Console.Write("\t{0}", tmp);
Console.WriteLine();
}
}
}
코드에 대한 부가 정보를 기록하고 읽을 수 있는 기능
클래스나 메소드에 대한 구분을 하기 위한 표시 데이터
주석 : 사람이 읽고 쓰는 정보
애트리뷰트 : 사람이 작성하고 컴퓨터가 읽는 정보
[ 애트리뷰트_이름( 애트리뷰트_매개변수) ]
public void MyMethod()
{
// ...
}