Dynamic programming with C#

* Dynamic Programming: Lập trình với dynamic sẽ khiến số lượng code giảm đi rất nhiều. Về performent thì chương trình có thể chạy chậm hơn một chút so với chương trình được viết bằng tay. Tuy nhiên, chương trình sẽ được viết nhanh hơn rất nhiều so với chương trình được viết bằng tay.

* Những lợi ích:

– Giảm bớt những đoạn code lặp lại (duplicated) như kiểm tra (checking), phân tích cú pháp, ngữ nghĩa

– Rút ngắn mã lệnh (Code) và truy xuất tự động các thuộc tính nằm trong đối tượng.

– Hỗ trợ tốt cho lập trình hướng đối tượng.

 /// <summary>
/// 1. Lấy metadata để lấy được type (Loại) của đối tượng
/// 2. Tạo đối tượng Minivan từ type của nó
/// 3. Lấy thông tin từ function của đối tượng
/// 4. Gọi function và truyền biến vào trong method
///
/// Updated Date: 16/07/2013
/// </summary>
/// <param name=”asm”></param>
static void CreateUsingLateBinding(Assembly asm)
{
try
{
Type miniVan = asm.GetType(“CarLibrary.MiniVan”);
object obj = Activator.CreateInstance(miniVan);
MethodInfo mi = miniVan.GetMethod(“TurboBoost”);
mi.Invoke(obj, null);
}
catch (Exception ex)
{
MessageBox.Show(“Lỗi : ” + ex.Message);
}
}

/// <summary>
/// Sử dụng dynamic trong method làm cho chương trình ngắn hơn nhiều lại đơn giản hơn
/// Chỉ việc tạo một đối tượng từ Activator sau đó sử dụng
/// Ghi chú: Quan trọng nhất là các hàm (method) lúc sử dụng phải chính xác nếu không thì runtime sẽ báo lỗi
/// Compile sẽ không bao giờ báo lỗi với các class thuộc loại Dynamic
/// </summary>
/// <param name=”asm”></param>
static void InvokeMethodWithDynamicKeyword(Assembly asm)
{
try
{
Type miniVan = asm.GetType(“CarLibrary.MiniVan”);
dynamic car = Activator.CreateInstance(miniVan);
car.TuroBoost();
}
catch (Exception ex)
{
MessageBox.Show(“Lỗi : ” + ex.Message);
}
}

// Sử dụng dynamic Keyword với đối số (arg)

/// <summary>
/// Cách sử dụng Refection với đối số (parameter) truyền vào arg là một list của Object
/// </summary>
private static void AddWithReflection()
{
Assembly asm = Assembly.Load(“MathLibrary”);
try
{
Type math = asm.GetType(“MathLibrary.SimpleMath”);
object obj = Activator.CreateInstance(math);
MethodInfo mi = math.GetMethod(“Add”);
object[] arg = { 10, 20 };
MessageBox.Show(“Result is : ” + mi.Invoke(mi, arg));
}
catch (Exception ex)
{
MessageBox.Show(“Lỗi : ” + ex.Message);
}
}

/// <summary>
/// Cách sử dụng Dynamic với đối số vô cùng đơn giản
/// </summary>
private static void AddWithDynamic()
{
Assembly asm = Assembly.Load(“MathLibrary”);
try
{
Type math = asm.GetType(“MathLibrary.SimpleMath”);
dynamic lk = Activator.CreateInstance(math);
MessageBox.Show(“Result is : ” + lk.Add(70, 10));
}
catch (Exception ex)
{
MessageBox.Show(“Lỗi : ” + ex.Message);
}
}

Trong đó lệnh cần để sử dụng dynamic là: public class SimpleMath
public int Add(int x, int y)        {            return x + y;        }

Tagged: , , , ,

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: