PDA

View Full Version : سوال: تعریف متد خارج از کلاس



Sh_ziyaee
یک شنبه 23 فروردین 1388, 08:07 صبح
سلام
چطوری می تونیم یک متد را خارج از کلاس پیاده سازی کنیم؟

ASKaffash
یک شنبه 23 فروردین 1388, 08:44 صبح
سلام
ایجاد Member هائی نظیر Property و Method و Indexer و ... در سطح NameSpace مجاز نبوده و Methodتنها درون Class و Struct مجاز است

backspace
یک شنبه 23 فروردین 1388, 09:07 صبح
سلام
Extension Method راه حل مي باشد. شايد اصلا كارت با ِِِDelegate هم راه بيفته

ASKaffash
یک شنبه 23 فروردین 1388, 11:06 صبح
سلام
Extension Method راه حل مي باشد. شايد اصلا كارت با ِِِDelegate هم راه بيفته

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

vcldeveloper
یک شنبه 23 فروردین 1388, 11:53 صبح
در زبان های برنامه نویسی Pure Object Oriented مثل #C، وجود عضوی خارج از یک کلاس مفهوم نداره، و همه چیز باید در داخل کلاس ها تعریف بشند.
اگر نیاز به متدی دارید که بدون نیاز به ساخت یک نمونه (instance) از یک کلاس خاص قابل استفاده باشه، باید همانطور که دوستان گفتند، آن متد را بصورت static تعریف کنید.
متدهای static بر روی کلاس مربوطه عمل می کنند، نه نمونه شی ساخته شده از اون کلاس. برای همین هم در آنها امکان استفاده از متغیر this وجود نداره.

aminkk
یک شنبه 23 فروردین 1388, 12:10 عصر
در زبان های برنامه نویسی Pure Object Oriented مثل #C، وجود عضوی خارج از یک کلاس مفهوم نداره، و همه چیز باید در داخل کلاس ها تعریف بشند.
اگر نیاز به متدی دارید که بدون نیاز به ساخت یک نمونه (instance) از یک کلاس خاص قابل استفاده باشه، باید همانطور که دوستان گفتند، آن متد را بصورت static تعریف کنید.
متدهای static بر روی کلاس مربوطه عمل می کنند، نه نمونه شی ساخته شده از اون کلاس. برای همین هم در آنها امکان استفاده از متغیر this وجود نداره.

ممنون ولي ايا اين روش اصولي هستش؟يعني خلاف شي گرايي نيست و يا اشكالي نداره استفاه از اون؟

vcldeveloper
یک شنبه 23 فروردین 1388, 12:45 عصر
ممنون ولي ايا اين روش اصولي هستش؟يعني خلاف شي گرايي نيست و يا اشكالي نداره استفاه از اون؟
بستگی داره چطور ازش استفاده کنید. مثلا استفاده از متدهای static بعضی مواقع لازم هست، مثلا استفاده از یک تابع API که نیاز به یک تابع CallBack داره. بعضی از مواقع هم استفاده نکردن از static موجب افزایش کار برنامه نویس میشه، مثلا تصورش را بکنید شما بخواید برای استفاده از یک تابع ریاضی ساده در #C، یک نمونه شی ایجاد کنید، و فرضا متد sin آن را فراخوانی کنید. در کلاس های دات نت متدهای زیادی بصورت static تعریف شدند، که اکثرشان نقش utility دارند.
در واقع شما می توانید هر متدی را که مستقیما بر روی نمونه شی از کلاس خودش کاری انجام نمیده را بصورت static تعریف کنید.

اما نکته ایی که باید بهش دقت کرد این هست که، ممکن هست برنامه نویسانی که چندان به مفاهیم شی گرایی آشنا نیستند، بیش از حد از متدها، و فیلدهای static استفاده کنند. یعنی عملا از این قابلیت برای دور زدن شی گرایی استفاده کنند. معمولا در کدهای این افراد شما فقط ظاهری از کلاس ها را مشاهده می کنید، ولی باطن کد همان کدهای ساخت یافته سابق هست، و اصلا به شی گرایی توجه نشده. مسلما اگر از اعضاء static برای این منظور استفاده بشه، اشکال داره.

Mehdi Asgari
یک شنبه 23 فروردین 1388, 13:06 عصر
چطوری می تونیم یک متد را خارج از کلاس پیاده سازی کنیم؟
یه تابع عمومی ؟
در دات نت این امکان وجود داره ، اما در سی شارپ نه (مثلا توسط خود IL یا ++Managed Cمیتونی این کار رو بکنی)