براساس سوال یکی از دوستان مبنی بر چگونگی تعریف متغیری که در تمام فرمها قابل استفاده باشد، میخواهم در مورد کلاسها و اعضای static توضیح مختصری بدم:
یک کلاس از نوع static که بصورت نمونه زیر تعریف میشود ، خواص زیر را داراست:
public static class CompanyInfo
}
; public static string CompanyName
; public static string CompanyAddress
{
امکان گرفتن و ایجاد نمونه (Instance) از این نوع کلاس وجود ندارد.
اعضای آن تنها میتوانند از نوع static باشند.
این کلاسها sealed هستند و در نتیجه امکان وراثت و inheritance از آنها و برای آنها وجود ندارد .
نمیتوانند constructor داشته باشند ، مگر یک static constructor برای تعیین و انتصاب مقادیر اولیه .
برای ساماندهی متدهایی که با object های خاصی کار نمیکنند (مثلا متدهای کلاس Math در Sysytem namespace) میتوانید یک کلاس از این نوع ایجاد کنید با متدها و متغیرهایی از همین نوع و بدون الزام در ساختن و گرفتن object از آن کلاس ، از متدها و متغیرهای موجود در آن بطور مستقیم و با بکار بردن نام کلاس ، استفاده کنید . به مثال زیر توجه کنید :
public class Automobile
}
; public static int NumberOfWheels = 4
public static int SizeOfGasTank
}
get
}
; return 15
{
{
{} ()public static void Drive
; public static event EventType RunOutOfGas
{
و برای دسترسی به اعضا و متدها :
Automobile.Drive ;()
;int i = Automobile.NumberOfWheels
شما در یک کلاس غیر static هم میتوانید متد ،property , field یا event هایی از این نوع تعریف کنید و بدون تعریف یک instance از آن کلاس به اعضای static آن دسترسی داشته باشد . اگرچه حتی اگر instance ای هم از کلاس بسازید ، توسط آن نمیتوانید به این اعضا دسترسی پیدا کنید.
یک مثال دیگر :
public class MyBaseC
}
public struct MyStruct
}
; public static int x = 100
{
{
MyBaseC.MyStruct.x