(برنامه نویسی سی شارپ) نمونه سازی کلاس Class در زبان #C (مهندسی برق _ الکترونیک)

پژوهشگر و نویسنده:  (  افشین رشید )

if (line.StartsWith("LIN"))
{
var lineItem = ReadItemLine<I>(uploadConfig, line, errMsg);
foreach (PropertyInfo p in properties)
{
if (p.Name != "LineItems")
continue;
//1) if items is null then create the object
List<I> items = p.GetValue(data[headIndex - 1], null);
if (items == null)
{
//2) add line item to data[headIndex - 1]
Item dd = new Item();
dd.ItemID = "1";
dd.ItemName = "item1";
List<Item> itemlist = new List<Item>();
itemlist.Add(dd);
p.SetValue(data[headIndex - 1], itemlist);
}
}
}

نکته: به وسیله قابلیت Reflection ،می خواهیم عمل نمونه سازی را در هنگام اجرا یا RunTime انجام دهیم و برای این منظور داشتن نامclass کلاسی که می خواهیم از آن نمونه بسازیم، ضروری است. 

چندین راه برای انجام کار فوق وجود دارد. اما من روشی را ترجیح می دهد که در آن یک رفرنس به تابع سازنده شی یا Constructor ایجاد کرده و آن را فعال می کنیم. سپس مقدار برگشتی از تابع را به عنوان نمونه خود به کار می بریم. این کلاس دارای یک فیلد خصوصی (field Private) و یک متد عمومی (method public) می باشد. هر کلاس class، مقدار فیلد خصوصی را به همراه مقدار پارامتر ارسالی که به آن اضافه شده است را بر می گرداند. حال کاری که ما می خواهیم انجام دهیم، ایجاد یک نمونه جدید از کلاس TextClass و سپس فراخوانی متد TextMethod و ارسال خروجی بر روی Console است.

برخی موارد، ممکن است مجبور شوید منحصرا از نام خود کلاس مورد نظر استفاده کنید. در چنین موردی، بایستی یک رفرنس را از طریق اسمبلی که کلاس در آن تعریف شده است، ایجاد نمایید، با داشتن یک رفرنس Type به کلاس مورد نظر، می توانیم تابع سازنده پیش فرض default Constructor را با استفاده از قید GetConstructor احضار کنیم. سپس مقدار Empty.Type.System Types را به عنوان پارامتر، بدان پاس می دهیم. در مواردی هم که به دنبال یک Constructor خاصی هستیم، بایستی آرایه ای از Type را تعیین نموده که هر کدام مشخص می کنند هر Constructor ،چه پارامترهایی را دریافت خواهند کرد.تا زمانی که یک رفرنس به تابع سازنده Constructor داریم، می توانیم به سادگی با فراخوانی متد (invoke) یک نمونه از کلاس TestClass را ایجاد نماییم. اگر نخواستیم پارامتری را به تابع ارسال کنیم، بایستی مقدار null را به متد invoke پاس دهیم. همچنین از متد GetMethod به همراه نام متدی که لازم داریم را برای گرفتن تابع (TestMethod) استفاده خواهیم کرد. در نهایت باز از ابزار کاربردی (invoke) برای فراخوانی تابع فوق، بهره می گیریم. اما این بار نیاز خواهیم داشت تا یک پارامتر از نوع آرایه از اشیا of array objects را تعیین کنیم.

پژوهشگر و نویسنده:  دکتر (  افشین رشید )