PDA

View Full Version : چگونگی تعریف چند متغیر یا متد به صورت public بدون آوردن چندباره نام public



rainlover
دوشنبه 16 شهریور 1388, 15:42 عصر
سلام
متن سوال کمی سخت بود ولی سوال ساده ای دارم
تو C++‎‎‎ برای اینکه بخای تو تعریف کلاس متد و خاصیت و فیلد تعریف کنی میشه اینطور عمل کرد


class new
{
public:
int x;
void show();
}
و به همین ترتیب تو یه فضای مثلا public تعریف ها رو انجام میدیم
و دیگه کلمه public یا private رو پشت تعاریف تکرار نمی کنیم.
تو C#‎‎‎ امتحان کردم دیدم اینطوری نیست
شک ندارم C#‎‎‎ هم این قابلیت رو داره ولی Syntax اون رو بلد نیستم
ممنون میشم کمک کنید

rainlover
دوشنبه 16 شهریور 1388, 23:58 عصر
بابا یکی یه چیزی بگه:ناراحت::ناراحت::ناراحت:: اراحت::ناراحت:

sgb110
سه شنبه 17 شهریور 1388, 00:36 صبح
سلام


public int i, j, z, m, n;

اَرژنگ
سه شنبه 17 شهریور 1388, 04:08 صبح
سلام
متن سوال کمی سخت بود ولی سوال ساده ای دارم
تو C++‎‎‎‎ برای اینکه بخای تو تعریف کلاس متد و خاصیت و فیلد تعریف کنی میشه اینطور عمل کرد


class new
{
public:
int x;
void show();
}
و به همین ترتیب تو یه فضای مثلا public تعریف ها رو انجام میدیم
و دیگه کلمه public یا private رو پشت تعاریف تکرار نمی کنیم.
تو C#‎‎‎‎ امتحان کردم دیدم اینطوری نیست
شک ندارم C#‎‎‎‎ هم این قابلیت رو داره ولی Syntax اون رو بلد نیستم
ممنون میشم کمک کنید

سوای اینکه این روش پابلیک کردن متغییرها خلاف اصول شئگرائی است، اگر این کار شدنی هم باشد بیشتر به کمخوانائی کد کمک میکند.
احتیاج به این روش نشانگر طراحی خراب و پیاده سازی بدتر کد میباشد.

alireza_tavakol
سه شنبه 17 شهریور 1388, 12:39 عصر
شک ندارم C#‎‎‎‎‎ هم این قابلیت رو داره ولی Syntax اون رو بلد نیستم
ممنون میشم کمک کنید

من نمی دونم شما از کجا این قدر قاطعانه صحبت می کنی ولی من توی هیچ کتاب یا source code ندیدم که بشه مثل C++‎ و یا دلفی به صورت گله ای یا کلی سطح دسترسی تعدادی متد یا فیلد رو مشخص کرد

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

البته برای بهداشت در کد نویسی خیلی بهتر که تمام عناصر public در کنار هم تعریف گردد و تمام عناصر private در کنار هم باشند و ...

ولی در کل به نظر من اگه یک همچین قابلیتی در C#‎ وجود داشت باعث انعطاف پذیری بیشتر می شد!

موفق باشید

amir_pro
سه شنبه 17 شهریور 1388, 16:48 عصر
شک ندارم C#‎‎‎‎ هم این قابلیت رو داره ولی Syntax اون رو بلد نیستم
ممنون میشم کمک کنید

دوست عزیز شما درست میگید این قابلیت در C# وجود داره ولی نه به این صورت که شما فکر می کنید. فقط در داخل اینترفیس ها شما میتونید همچین تعریفی داشته باشید

alireza_tavakol
سه شنبه 17 شهریور 1388, 19:16 عصر
تو C++‎‎‎‎‎‎ برای اینکه بخای تو تعریف کلاس متد و خاصیت و فیلد تعریف کنی میشه اینطور عمل کرد


class new
{
public:
int x;
void show();
}
و به همین ترتیب تو یه فضای مثلا public تعریف ها رو انجام میدیم
و دیگه کلمه public یا private رو پشت تعاریف تکرار نمی کنیم.
شک ندارم C#‎‎‎‎‎‎ هم این قابلیت رو داره ولی Syntax اون رو بلد نیستم

در داخل اینترفیس ها شما میتونید همچین تعریفی داشته باشید

:متعجب:
توی اینترفیس که حق نداری فیلد تعریف کنی ولی برای متد ها و پروپرتی ها نیز نباید سطح دسترسی رو تعیین کرد ، چون اگه سطح دسترسی رو تعیین کنی به نحوی داری پیاده سازی انجام می دی و اصلا" فلسفه وجودی اینترفیسها آری از هر گونه پیاده سازی است.

اَرژنگ
سه شنبه 17 شهریور 1388, 19:21 عصر
:متعجب:
توی اینترفیس که حق نداری فیلد تعریف کنی ولی برای متد ها و پروپرتی ها نیز نباید سطح دسترسی رو تعیین کرد ، چون اگه سطح دسترسی رو تعیین کنی به نحوی داری پیاده سازی انجام می دی و اصلا" فلسفه وجودی اینترفیسها آری از هر گونه پیاده سازی است.

فراموش نکنیم که در اینترفیس همه چی فقط میتونه پابلیک باشد، نمیشه سطحشان را تغییر داد.

rainlover
سه شنبه 17 شهریور 1388, 21:39 عصر
من نمی دونم شما از کجا این قدر قاطعانه صحبت می کنی ولی من توی هیچ کتاب یا source code ندیدم که بشه مثل C++‎‎‎ و یا دلفی به صورت گله ای یا کلی سطح دسترسی تعدادی متد یا فیلد رو مشخص کرد

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

البته برای بهداشت در کد نویسی خیلی بهتر که تمام عناصر public در کنار هم تعریف گردد و تمام عناصر private در کنار هم باشند و ...

ولی در کل به نظر من اگه یک همچین قابلیتی در C#‎‎‎ وجود داشت باعث انعطاف پذیری بیشتر می شد!

موفق باشید
بالاخره ما نفهمیدیم این قابلیت تو C#‎ باشه خوبه یا بد
یه جا میگی عین گله متد تعریف می کنیم
یه جا دیگه میگی خوب میشد این قابلیت رو می داشت.(انعطاف پذیر میشد)

alireza_tavakol
چهارشنبه 18 شهریور 1388, 01:34 صبح
با توجه به این که مبحث اینترفیس ربطی به موضوع این تاپیک ندارد کلامم را خلاصه میکنم


فراموش نکنیم که در اینترفیس همه چی فقط میتونه پابلیک باشد، نمیشه سطحشان را تغییر داد.
من با این جمله مخالفم چون ، در اینترفیس حق تعیین سطح دسترسی برای اعضا را نداریم اما در کلاسی که قرار است اینترفیس را پیاده سازی کنیم می توانیم سطح دسترسی اعضایی که متعلق به اینترفیس هستند و قرار است در این کلاس پیاده سازی شوند را تعیین نمود . مثال


فرض کنید اینترفیسی به اسم shape را داشته باشم

public interface Ishape
{
void draw();
}


فرض کنید کلاسی به اسم rectangle داشته باشم که ملزم به پیاده سازی اینترفیس shape باشد

public class rectangle : Ishape
{
public void draw()
{
MessageBox.Show("draw rectangle");
}
}


فرض کنید کلاسی به اسم circle داشته باشیم که ملزم به پیاده سازی اینترفیس shape باشد

public class circle : Ishape
{
void Ishap.draw()
{
MessageBox.Show("draw circle");
}
}



با توجه به اینکه هر دو کلاس circle و rectangle اینترفیس shape را پیاده سازی کرده اند اما متد draw برای نمونه شی مستطیل public است ولی برای نمونه شی دایره private است

rectangle r = new rectangle();
r.draw();

circle c = new circle();
c.draw(); //Error


برای استفاده از این متد که اینترفیس ذکر شده بود باید به شکل زیر عمل شود!

Ishape[] s = new Ishape[2];
s[0] = new circle();
s[1] = new rectangle();

foreach (Ishape i in s)
i.draw();

alireza_tavakol
چهارشنبه 18 شهریور 1388, 01:40 صبح
بالاخره ما نفهمیدیم این قابلیت تو C#‎‎ باشه خوبه یا بد
یه جا میگی عین گله متد تعریف می کنیم
یه جا دیگه میگی خوب میشد این قابلیت رو می داشت.(انعطاف پذیر میشد)

به نظر کامپایلر C# این قابلیت نباید وجود داشته باشه تا کسی نتونه به صورت گله ای با اعضای کلاس برخورد بکنه چون سطح دسترسی عنصر بسیار مهم است

به نظر من هر چیزی بودش بهتر از نبودش است و اگه این قابلیت رو کامپایلر C# در خودش قرار می داد باعث انعطاف پذیری بیشتر می شود

در واقع در بخش اول علت عدم وجود این قابلیت رو توجیه کردم و در بخش دوم یک نظر پردازی شخصی کردم