리플렉션을 사용하여 동적으로 아래 표시된 클래스를 빌드 할 수 있습니까? 메소드가 없으며, 공용 변수 만 있고, 일부는 사용자 정의 속성을 가지고 있습니다.Reflection을 사용하여 클래스 작성 (동적 FileHelper 클래스 작성)
.Emit 메서드가 필요합니까 ("Emit"는 조금 어려워 보입니다).
나는 www.FileHelpers.net에서 소프트웨어를 사용하고 있으며 수업이 필요합니다. 모든 파일 정의가 데이터베이스 테이블에 있으며 모든 것을 동적으로 만들고 싶습니다. 즉, 파일에 새 열이 나타나면 코드가 변경되지 않습니다.
[FileHelpers.DelimitedRecord(",")]
public class FileRow
{
[FileHelpers.FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string Borrower_First_Name;
[FileHelpers.FieldQuoted('"', QuoteMode.OptionalForBoth)]
public string Borrower_Last_Name;
public string Borrower_Email;
}
업데이트 1 :
// need to reference the FileHelpers.dll from our own .exe directory
string diskFilenameFileHelpersDLL =
System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().Location) +
@"\FileHelpers.dll";
업데이트 2 : 내가 DLL을 참조하는 데 필요한 아래 블라드의 답변에 따라이 여기에 어떻게 내가 해냈어 또한, 블라드 제안하는 일을 한 후,이 내가 전화하는 방법입니다 FileHelper를 실행하고 결과를 반복합니다. 아마도 데이터를 목록으로 전송할 것입니다.
Assembly assembly = compiledResult.CompiledAssembly;
// Simple Data Test
lineContents = "John,Doe,[email protected]";
FileHelperEngine engine = new FileHelperEngine(assembly.GetType("FileRow"));
// FileRow[] FileRowArray = (FileRow[])engine.ReadString(lineContents);
Object[] FileRowArray = engine.ReadString(lineContents);
Object myObject = FileRowArray[0]; // only 1 row of data in this example
// Get the type handle of a specified class.
Type myType = assembly.GetType("FileRow");
// Get the fields of the specified class.
FieldInfo[] myField = myType.GetFields();
Console.WriteLine("\nDisplaying fields values:\n");
for (int i = 0; i < myField.Length; i++)
{
Object objTest = myField.GetValue(i);
string tempName = myField[i].Name;
Object objTempValue = myField[i].GetValue(myObject);
string tempValue = System.Convert.ToString(objTempValue);
Console.WriteLine("The value of {0} is: {1}",
tempName, tempValue);
}
를 살펴 보자 [안녕, 세계 ... Reflection.Emit를 스타일!] (http://blogs.msdn.com/b/joelpob/archive/2004/01/21/61411.aspx) –
방출은 특별히 .DLL 또는 .EXE를 생성합니까? 메모리에 클래스 만 있으면되고 디스크에 저장되는 클래스는 없습니다. – NealWalters
나는 디스크에 저장할 필요가 없다고 말하고 있었다. – NealWalters