به زبان ساده بگم : C# زبانی با نوع قدرتمند است (Strong Type) یعنی چی ؟ یعنی تمام خصوصیت نوع مورد نظر و استفاذه شده تو کد ، برای کامپایلر مشخص و قابل دیدن هستش (هر نوع METADATA داره که رفتار و خصوصیاتشو به IntelliSense ویژوال استادیو و کامپایلر میگه) و کامپایلر مجبور میکنه نوع ها رو که خودشونو کاملا معرفی بکنند که بش میگیم Strong Type، با استفاده از Dynamic ما به کامپایلر میگیم که Strong Type رو نادیده بگیر برای این نوع خاصی که ما تعریف کردیم.و اطلاعاتی که ما بت میدیم رو در زمان اجرا چک کن!! یعنی شما با استفاده از کلمه داینامیک میتونید از توابع، کلاس ها ، یا درواقع ReferenceType ها و Value Type ی که کامپایلر نمیناشه استفاده کنی و کامپایلر در زمان اجرا مقادیرشونو مشخص میکنه!
حالا میگید این چه کاربردی داره ؟ خب برنامه نوسی COM رو در نظر بگیرید ، مثلا برنامه نویسی OFFICE Word.ما میدونیم که این کتابخانه ، تابعی به نامه مثلا CreateNewPage داره ، ولی کامپایلر که اینو نمیدونه در زمان کد نویسی ، و مقادیرشونو بعدا میگیره ، البته اگه کدهایی که نوشتید درست نباشه ، با خطا در زمان اجرا رو برو میشید. نمونه کد :
public static void Create(string file, DateTime now, String author)
{
// Run Word and make it visible for demo purposes
dynamic wordApp = new Application { Visible = true };
// Create a new document
var doc = wordApp.Documents.Add(TemplateName);
templatedDocument.Activate();
// Fill the bookmarks in the document
doc.Bookmarks[CurrentDateBookmark].Range.Select();
wordApp.Selection.TypeText(current.ToString());
doc.Bookmarks[SignatureBookmark].Range.Select();
wordApp.Selection.TypeText(author);
// Save the document
doc.SaveAs(fileName);
// Clean up
templatedDocument.Close();
wordApp.Quit();
}