کار با متدها و اضافه کردن آنها به کلاس های پویا در زبان سی شارپ

کلاس های پویا

برای اضافه متدها به کلاس های پویا از کلاس CodeMemberMethod استفاده می کنیم که ویژگی های مختلفی را ارائه می دهد. این ویژگی ها در تعریف متدهایمان کمک کننده است. از این کلاس برا یایجاد متدهای پویایی که دو پارامتر ورودی می گیرد و عملیات جمع را روی آن ها انجام می دهد و درنهایت نتیجه را بر می گرداند. پس خصوصیات مربوط به متدهای اصلی را ایجاد خواهیم کرد. و پس انجام این مراحل، کدها به صورت زیر خواهد بود.

CodeTypeReference methodReturnType = new CodeTypeReference(typeof(System.Int32)); 

CodeMemberMethod myMethod = new CodeMemberMethod();  
 // Generate Method signatures.  
 myMethod.Name = "MySum";  
 myMethod.ReturnType = methodReturnType;  
 myMethod.Attributes = MemberAttributes.Public;  

نکته مهم، استفاده از CodeTypeReference برای تعیین نوع مقدار بازگشتی متدمان است. در ادامه از کلاس CodeParameterDeclarationExpression برای ایجاد پارامترهای کلاسمان و همین طور اضافه کردن این پارامترها به متد، استفاده می کنیم. نتیجه بنابراین کدها به صورت زیر خواهد بود:


// Initialize for Method parameters  
CodeParameterDeclarationExpression methodPrm1 = new CodeParameterDeclarationExpression(typeof(Int32), "X");  
CodeParameterDeclarationExpression methodPrm2 = new CodeParameterDeclarationExpression(typeof(Int32), "Y");  
myMethod.Parameters.AddRange(new CodeParameterDeclarationExpression[] { methodPrm1, methodPrm2 });  


سپس، با استفاده از کلاس CodeSnippetExpression، قسمت تعریف متد را مشخص می کنیم. تعریف متدمان مجموع دو پارامتر ورودی XوY را به عنوان خروجی پس می دهد. بنابراین یک عبارت جدیدی ایجاد می کنیم تا عملیات جمع را انجام داده و نتیجه را به متد اضافه کند. کدهای مربوط به مطالب بالا در پایین آورده شده است.


// Generate method definition  
CodeSnippetExpression codeSnippet = new CodeSnippetExpression("return X + Y");  
// Add method definition to method  
myMethod.Statements.Add(codeSnippet);  

 

پیشنهاد میشود : کار با کلاس Abstract در سی شارپ
در آخرین قسمت، متد را به کلاسمان اضافه می کنیم:

// Add method to the class.  
cls.Members.Add(myMethod);  

کد کامل مطالبی که در این مقاله بیان شد به صورت زیر است:


CodeNamespace nameSpace = new CodeNamespace("myNameSpace");  
  
 nameSpace.Imports.Add(new CodeNamespaceImport("System"));  
 nameSpace.Imports.Add(new CodeNamespaceImport("System.Linq"));  
 nameSpace.Imports.Add(new CodeNamespaceImport("System.Text"));  
  
 CodeTypeDeclaration cls = new CodeTypeDeclaration();  
 cls.Name = "MyClass";  
 cls.IsClass = true;  
 cls.Attributes = MemberAttributes.Public;  
 nameSpace.Types.Add(cls);  
  
 // Initialize for Method Return type  
 CodeTypeReference methodReturnType = new CodeTypeReference(typeof(System.Int32));  
 CodeMemberMethod myMethod = new CodeMemberMethod();  
  
 // Generate Method signatures.  
 myMethod.Name = "MySum";  
 myMethod.ReturnType = methodReturnType;  
 myMethod.Attributes = MemberAttributes.Public | MemberAttributes.Final;  
  
 // Initialize for Method parameters  
 CodeParameterDeclarationExpression methodPrm1 = new CodeParameterDeclarationExpression(typeof(Int32), "X");  
 CodeParameterDeclarationExpression methodPrm2 = new CodeParameterDeclarationExpression(typeof(Int32), "Y");  
 myMethod.Parameters.AddRange(new CodeParameterDeclarationExpression[] { methodPrm1, methodPrm2 });  
  
 // Generate method definition  
 CodeSnippetExpression codeSnippet = new       CodeSnippetExpression("return X + Y");  
  
// Add method definition to method  
 myMethod.Statements.Add(codeSnippet);  
  
 // Add method to the class.  
 cls.Members.Add(myMethod);  
  
 CodeCompileUnit compileUnit = new CodeCompileUnit();  
 compileUnit.Namespaces.Add(nameSpace);  
 CSharpCodeProvider csharpcodeprovider = new CSharpCodeProvider();  
  
 CSharpCodeProvider provider = new CSharpCodeProvider();  
  
 using (StreamWriter sw = new StreamWriter(@"D:\TestFile.cs", false))  
 {  
     IndentedTextWriter tw = new IndentedTextWriter(sw, "    ");  
     provider.GenerateCodeFromCompileUnit(compileUnit, tw, new CodeGeneratorOptions());  
     tw.Close();  
 }  



برنامه را اجرا کنید و کدهای زیر را نگاه کنید:


//------------------------------------------------------------------------------  
// <auto-generated>  
//     This code was generated by a tool.  
//     Runtime Version:4.0.30319.42000  
//  
//     Changes to this file may cause incorrect behavior and will be lost if  
//     the code is regenerated.  
// </auto-generated>  
//------------------------------------------------------------------------------  
  
namespace myNameSpace {  
    using System;  
    using System.Linq;  
    using System.Text;  
      
      
    public class MyClass {  
          
        public int MySum(int X, int Y) {  
            return X + Y;  
        }  
    }  
}  

امیدوارم از خواندن این مقاله لذت کافی را برده باشید.

  • پسورد: www.mspsoft.com
محمد دهقانی

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.