داینامیک متغیری است که نوع آن در زمان اجرا مشخص و تعیین می گردد نه در زمان کمپایل شدن . یعنی ما می توانیم هر نوع داده را درون آن جای دهیم.
این نوع متغیر با کلمه رزرو شده dynamic تعریف می شود.
dynamic Varname = 1;
کمپایلر معمولا این نوع متغیر را هنگام کمپایل به نوع object تبدیل می کند .
Interface
اینتر فیس ظاهری شبیه کلاس دارد و دارای تعاریف ، متدها ، صفت ها و رویدادهاست ولی قابل پیاده سازی نمی باشد و این بر عهده کلاس است که اعضاء اینترفیس را آنگونه که می خواهد پیاده سازی کند.
نکته : اینترفیس نمی تواند دارای اعضاء Private باشد بلکه بصورت پیش فرض بصورت Public می باشند.
یک اینترفیس با کمک کلمه رزرو شده interface تعریف می شود .
using System;
namespace InterfaceApplication {
public interface ITransactions {
// interface members
void showTransaction();
double getAmount();
}
public class Transaction : ITransactions {
private string tCode;
private string date;
private double amount;
public Transaction() {
tCode = " ";
date = " ";
amount = 0.0;
}
public Transaction(string c, string d, double a) {
tCode = c;
date = d;
amount = a;
}
public double getAmount() {
return amount;
}
public void showTransaction() {
Console.WriteLine("Transaction: {0}", tCode);
Console.WriteLine("Date: {0}", date);
Console.WriteLine("Amount: {0}", getAmount());
}
}
class Tester {
static void Main(string[] args) {
Transaction t1 = new Transaction("001", "8/10/2012", 78900.00);
Transaction t2 = new Transaction("002", "9/10/2012", 451900.00);
t1.showTransaction();
t2.showTransaction();
Console.ReadKey();
} } }
خروجی برنامه بصورت زیر می باشد
Transaction: 001 Date: 8/10/2012 Amount: 78900 Transaction: 002 Date: 9/10/2012 Amount: 451900
کلاس: Class
کلاس در برنامهنویسی شیءگرا یک ساختار یا الگو (Template) است که ویژگیها (دادهها) و رفتارها (عملیات یا متدها) یک موجودیت را تعریف میکند. از کلاس میتوان برای ایجاد نمونههای قابل استفاده (اشیاء) استفاده کرد یا بهصورت استاتیک برای سازماندهی کدها و ارائه قابلیتهای مستقل از نمونهسازی به کار برد. کلاس همچنین امکاناتی مثل وراثت (Inheritance)، کپسولهسازی (Encapsulation) و چندریختی (Polymorphism) را فراهم میکند تا کد سازمانیافتهتر، قابلاستفاده مجدد و انعطافپذیرتر شود.
یک کلاس دارای اعضایی است که به دو دسته کلی تقسیم میشوند:
دادهها: شامل فیلدها (Fields) و خصوصیات (Properties) هستند که اطلاعات مربوط به شیء را نگه میدارند.
عملکردها: شامل متدها (Methods) و رویدادها (Events) هستند که رفتارها یا عملیات شیء را تعریف میکنند.
بهصورت نمادین:
کلاس = {دادهها (فیلدها و خصوصیات) + عملکردها (متدها و رویدادها)}
یک کلاس با استفاده از کلیدواژه class، به دنبال آن یک نام برای کلاس و سپس دو کروشه {} تعریف میشود. در مثال زیر، کلاسی به نام MyClass تعریف شده که هنوز هیچ عضوی ندارد و در نتیجه فعلاً کاری انجام نمیدهد:
class MyClass
{
}
کانستراکتور (Constructor)
هر کلاس میتواند یک یا چند سازنده (Constructor) داشته باشد. سازنده متدی خاص است که هنگام ایجاد نمونهای از کلاس بهصورت خودکار اجرا میشود و معمولاً برای مقداردهی اولیه به دادههای شیء استفاده میشود. اگر شما هیچ سازندهای بهصورت صریح تعریف نکنید، کامپایلر C# بهطور خودکار یک سازنده پیشفرض (Default Constructor) بدون پارامتر ایجاد میکند که هیچ عملی جز ساخت شیء انجام نمیدهد.
سازنده با تعیین سطح دسترسی (مثلاً public)، نامی دقیقاً مشابه نام کلاس و علامت () تعریف میشود و میتواند با پارامتر یا بدون پارامتر باشد. در مثال زیر، سازنده کلاس MyClass بدون پارامتر است:
class MyClass
{
public MyClass()
{
// اینجا میتوانید کد مقداردهی اولیه بنویسید
}
}
توجه: برخلاف برخی تصورات، سازنده را نمیتوان پس از ساخت شیء بهصورت دستی فراخوانی کرد. سازنده فقط هنگام نمونهسازی (با کلیدواژه new) اجرا میشود. اگر نیاز به اجرای کد خاصی بعد از ساخت شیء دارید، باید از متدهای معمولی استفاده کنید.
دسترسی به اعضای کلاس
برای دسترسی به اعضای یک کلاس (چه دادهها و چه عملکردها)، معمولاً باید ابتدا یک نمونه (Object) از آن کلاس بسازید و سپس از طریق آن نمونه به اعضایش دسترسی پیدا کنید. البته اعضای استاتیک (Static) نیازی به نمونهسازی ندارند و مستقیماً از طریق نام کلاس قابل دسترسیاند.
در مثال زیر، کلاسی به نام MyClass تعریف شده که شامل یک فیلد غیراستاتیک (nonStaticVariable)، یک فیلد استاتیک (staticVariable) و دو متد است:
using System;
namespace ClassTest
{
class Program
{
class MyClass
{
int nonStaticVariable; // متغیر غیراستاتیک (هر شیء مقدار خودش را دارد)
static int staticVariable; // متغیر استاتیک (مشترک بین همه اشیاء)
public void SetVars(int v1, int v2)
{
nonStaticVariable = v1;
staticVariable = v2;
}
public void Display()
{
Console.WriteLine("nonStaticVariable = {0} staticVariable = {1}", nonStaticVariable, staticVariable);
Console.ReadKey();
}
}
static void Main()
{
MyClass d1 = new MyClass(); // ساخت نمونه اول
MyClass d2 = new MyClass(); // ساخت نمونه دوم
d1.SetVars(2, 4);
d1.Display(); // نمایش مقادیر d1
d2.SetVars(15, 17);
d2.Display(); // نمایش مقادیر d2
}
}
}
توضیح مثال:
دو نمونه (d1 و d2) از کلاس MyClass ساخته شدهاند.
متد SetVars برای هر نمونه مقادیر متفاوتی ست کرده است.
چون nonStaticVariable غیراستاتیک است، هر نمونه مقدار خودش را نگه میدارد.
اما staticVariable استاتیک است و بین همه نمونهها مشترک است، بنابراین آخرین مقدار تنظیمشده (17) برای هر دو نمونه نمایش داده میشود.
خروجی برنامه:
nonStaticVariable = 2 staticVariable = 4
nonStaticVariable = 15 staticVariable = 17
using دو کاربرد دارد کاربرد اول :
برای معرفی namespace و استفاده بدون قید و شرط از تمام امکانات آن .
using nameOfANameSpace;
دستورالعمل کاربرد باید در بالای هر پرونده و پیش از هر اعلام دیگری بکار رود .
using alias = name;