C 언어
반성 객체는 런타임에 유형 정보를 얻는 데 사용됩니다. 실행 중인 프로그램의 메타데이터에 대한 액세스를 제공하는 클래스는 System.Reflection에 있습니다. 네임스페이스.
시스템.반사 네임스페이스에는 응용 프로그램에 대한 정보를 얻고 응용 프로그램에 유형, 값 및 개체를 동적으로 추가할 수 있는 클래스가 포함되어 있습니다.
Reflection에는 다음과 같은 응용 프로그램이 있습니다 -
런타임에 속성 정보를 볼 수 있습니다.
어셈블리에서 다양한 유형을 검사하고 이러한 유형을 인스턴스화할 수 있습니다.
메서드 및 속성에 대한 늦은 바인딩을 허용합니다.
런타임에 새 유형을 생성한 다음 해당 유형을 사용하여 일부 작업을 수행할 수 있습니다.
이전 장에서 리플렉션을 사용하여 속성 정보를 볼 수 있다고 언급했습니다.
회원 정보 System.Reflection의 개체 클래스와 관련된 속성을 검색하려면 클래스를 초기화해야 합니다. 이렇게 하려면 대상 클래스의 개체를 다음과 같이 정의합니다. -
System.Reflection.MemberInfo info = typeof(MyClass);
다음 프로그램은 이것을 보여줍니다 -
using System; [AttributeUsage(AttributeTargets.All)] public class HelpAttribute : System.Attribute { public readonly string Url; public string Topic // Topic is a named parameter { get { return topic; } set { topic = value; } } public HelpAttribute(string url) // url is a positional parameter { this.Url = url; } private string topic; } [HelpAttribute("Information on the class MyClass")] class MyClass { } namespace AttributeAppl { class Program { static void Main(string[] args) { System.Reflection.MemberInfo info = typeof(MyClass); object[] attributes = info.GetCustomAttributes(true); for (int i = 0; i < attributes.Length; i++) { System.Console.WriteLine(attributes[i]); } Console.ReadKey(); } } }
컴파일되고 실행되면 MyClass 클래스에 연결된 사용자 정의 속성의 이름이 표시됩니다. -
HelpAttribute
이 예에서는 DeBugInfo를 사용합니다. 이전 장에서 생성된 속성을 사용하고 리플렉션을 사용하여 Rectangle의 메타데이터를 읽습니다. 수업.
라이브 데모using System; using System.Reflection; namespace BugFixApplication { //a custom attribute BugFix to be assigned to a class and its members [AttributeUsage( AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Field | AttributeTargets.Method | AttributeTargets.Property, AllowMultiple = true)] public class DeBugInfo : System.Attribute { private int bugNo; private string developer; private string lastReview; public string message; public DeBugInfo(int bg, string dev, string d) { this.bugNo = bg; this.developer = dev; this.lastReview = d; } public int BugNo { get { return bugNo; } } public string Developer { get { return developer; } } public string LastReview { get { return lastReview; } } public string Message { get { return message; } set { message = value; } } } [DeBugInfo(45, "Zara Ali", "12/8/2012", Message = "Return type mismatch")] [DeBugInfo(49, "Nuha Ali", "10/10/2012", Message = "Unused variable")] class Rectangle { //member variables protected double length; protected double width; public Rectangle(double l, double w) { length = l; width = w; } [DeBugInfo(55, "Zara Ali", "19/10/2012", Message = "Return type mismatch")] public double GetArea() { return length * width; } [DeBugInfo(56, "Zara Ali", "19/10/2012")] public void Display() { Console.WriteLine("Length: {0}", length); Console.WriteLine("Width: {0}", width); Console.WriteLine("Area: {0}", GetArea()); } }//end class Rectangle class ExecuteRectangle { static void Main(string[] args) { Rectangle r = new Rectangle(4.5, 7.5); r.Display(); Type type = typeof(Rectangle); //iterating through the attribtues of the Rectangle class foreach (Object attributes in type.GetCustomAttributes(false)) { DeBugInfo dbi = (DeBugInfo)attributes; if (null != dbi) { Console.WriteLine("Bug no: {0}", dbi.BugNo); Console.WriteLine("Developer: {0}", dbi.Developer); Console.WriteLine("Last Reviewed: {0}", dbi.LastReview); Console.WriteLine("Remarks: {0}", dbi.Message); } } //iterating through the method attribtues foreach (MethodInfo m in type.GetMethods()) { foreach (Attribute a in m.GetCustomAttributes(true)) { DeBugInfo dbi = (DeBugInfo)a; if (null != dbi) { Console.WriteLine("Bug no: {0}, for Method: {1}", dbi.BugNo, m.Name); Console.WriteLine("Developer: {0}", dbi.Developer); Console.WriteLine("Last Reviewed: {0}", dbi.LastReview); Console.WriteLine("Remarks: {0}", dbi.Message); } } } Console.ReadLine(); } } }
위의 코드를 컴파일하고 실행하면 다음과 같은 결과가 생성됩니다. -
Length: 4.5 Width: 7.5 Area: 33.75 Bug No: 49 Developer: Nuha Ali Last Reviewed: 10/10/2012 Remarks: Unused variable Bug No: 45 Developer: Zara Ali Last Reviewed: 12/8/2012 Remarks: Return type mismatch Bug No: 55, for Method: GetArea Developer: Zara Ali Last Reviewed: 19/10/2012 Remarks: Return type mismatch Bug No: 56, for Method: Display Developer: Zara Ali Last Reviewed: 19/10/2012 Remarks:
C 언어
초록 광통신 기술의 발전을 위해서는 강력한 전자파 변조기의 설계가 필요하다. 본 연구에서는 그래핀의 대역간 전이와 메타물질의 자기 쌍극자 공명 간의 상호 작용을 통해 근적외선 영역에서 전자기파의 진폭을 효율적으로 변조하는 방법을 연구합니다. 자기 쌍극자 공명으로 인한 전자기장이 그래핀의 광 흡수를 크게 증가시키기 때문에 메타 물질의 반사 스펙트럼은 대역 간 전이 아래의 파장 범위에서 크게 감소할 수 있습니다. 반사 스펙트럼의 최대 변조 깊이는 외부 전압이 인가되어 그래핀의 페르미 에너지가 변경될 때 대역 간 전이가 자기 쌍극자 공
초록 모스2 및 ReS2 많은 우수한 전기적 및 광학적 특성을 가진 전형적인 전이 금속 칼코겐화물입니다. 다른 격자 대칭으로 인해 ReS2 MoS2보다 하나 더 많은 차원을 제공합니다. 물리적 특성을 조정합니다. 이 논문에서 우리는 단층 MoS2에서 편광 반사 스펙트럼을 연구했습니다. 및 ReS2 . 명백한 차이는 단일 레이어 ReS2에서 강력한 각도 종속 속성을 식별합니다. 단일 레이어 MoS2와 구별됨 . 두 SiO2에 대한 샘플 결과 /Si 기판 및 석영 기판은 단층 ReS2를 보여줍니다. 평면 내 이방성이며 반사 강도의 변