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를 보여줍니다. 평면 내 이방성이며 반사 강도의 변