PDA

View Full Version : سوال: متغیرهای استاتیک در سی شارپ



shekoofeh
شنبه 27 فروردین 1384, 22:13 عصر
سلام.
لطفا اگر کسی می تونه، واسه من از هر سه جمله زیر یک مثال کوچولو بزنه.

1) متغیرها و متدهای غیر استاتیک، توسط متدهای استاتیک قابل دسترسی نیستند.
2) متغیرها و توابع استاتیک، توسط متدهای غیر استاتیک قابل دسترسی هستند.
3) متغیرها و توابع استاتیک، توسط مرجع شی قابل دسترسی نیستند.

پیشاپیش ممنونم. :oops:

small_programmer
یک شنبه 28 فروردین 1384, 16:31 عصر
مثال خاصی برای هرکدام وجود ندارد. فرض کنید که می خواهید از تابع sin استفاده کنید مسلما ایجاد یک شی و سپس استفاده از متد sin در آن شی کار جالبی نیست به همین دلیل آنرا به صورت public static در کلاس Math تعریف کرده اند که از هر کجا قابل استفاده است.
:موفق:

titbasoft
یک شنبه 28 فروردین 1384, 19:10 عصر
زمانی که شما از این modifier یعنی static برای تعریف متغیر ها یا توابعتون (متدها) استفاده می کنید به این معنا است که اون member خاص متعلق به یک instance از اون کلاس نیست و متعلق به اون type است. حالا سوال های شما رو بررسی می کنیم:

متغیرها و متدهای غیر استاتیک، توسط متدهای استاتیک قابل دسترسی نیستندخوب روشنه که اگر قرار بود این اتفاق بیافته چون در یک متد استاتیک هنوز هیچ instance ای از اون object ایجاد نشده پس چطور می تونیم به متغیرها و متد های استاتیک که به یک instance تعلق دارند دسترسی داشته باشیم


متغیرها و توابع استاتیک، توسط متدهای غیر استاتیک قابل دسترسی هستند.
این هم بدیهی است چون وقتی ما یک متغیر یا متد استاتیک داریم یعنی یک instance از اون object ایجاد شده. این در حالی است که حتی اگر اون instance ایجاد هم نشده بود باز هم به متغیر ها و متدهای استاتیک دسترسی داشتیم


متغیرها و توابع استاتیک، توسط مرجع شی قابل دسترسی نیستند.متاسفانه منظور از مرجع شی رو نمی دونم. اگر می تونید بفرمائید که ترجمه چیه؟

small_programmer هم درست اشاره کردن فقط یه مقدار زیادی ساده بیان کردن

در ضمن ورود شما رو به برنامه نویس تبریک میگم و امیدوارم از وقتی که صرف این مجموعه می کنید نهایت استفاده رو ببرید. :flower:

aidinwashere
دوشنبه 29 فروردین 1384, 03:13 صبح
قصد جسارت در مقابل بزرگان را ندارم ولی:
"متغیرها و توابع استاتیک، توسط متدهای غیر استاتیک قابل دسترسی هستند."
این جمله مگر درست نیست؟!!
"چون وقتی ما یک متغیر یا متد استاتیک داریم یعنی یک instance از اون object ایجاد شده"
مگر متغیر و متد Static تنها با وجود آن Class قابل استفاده نیستند؟ مثال هم همان System.Math خودتان , پس نیازی به Instance از اون Objcet(به بیان بهتر "آن کلاس") نیست.
لطفا شفاف سازی بفرمایید!
با احترام.
:موفق:

omid_Ahmadi
دوشنبه 29 فروردین 1384, 08:31 صبح
متغیرها و توابع استاتیک، توسط متدهای غیر استاتیک قابل دسترسی هستند

مسلما این جمله غلط است!

کد کلاس زیر را در نظر بگیرید:


public class Class1
{
public static int staticInt = 10;
public int nonstaticInt;

public static int staticFunc()
{
int sum = staticInt + nonstaticInt;
return sum;
}

public int nonstaticFunc()
{
int sum = staticInt + nonstaticInt;
return sum;
}
public Class1()
{
}
}

اگر شما این کد را در #C استفاده کنید بعد از کامپایل با Error زیر روبرو میشوید:

An object reference is required for the nonstatic field, method or property 'NamespaceName.ClassName.nonstaticInt'

titbasoft
دوشنبه 29 فروردین 1384, 17:56 عصر
public static int staticFunc()
{
int sum = staticInt + nonstaticInt;
return sum;
}
در اینجا یک متغیر غیر استاتیک در داخل یک متد استاتیک صدا زده شده است.


پس نیازی به Instance از اون Objcet(به بیان بهتر "آن کلاس") اگر اشتباه نکنم مشکل شما در مفهوم کلاس است. یک کلاس یک مفهوم است و یک Instance از آن کلاس به معنای یک نمونه از آن است. مثلا sqlConnection یک کلاس است و cn یک instance از آن در این کد : cn SqlConnection اگر منظورتون رو اشتباه متوجه شدم ببخشید.