PDA

View Full Version : چرا نمیشه متد استاتیک چند ریختی تعریف کرد؟



Mahdi Fahmideh
جمعه 14 مرداد 1384, 18:02 عصر
کد :
using System;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace TimeTable
{
/// <summary>
/// Summary description for DataBaseObject.
/// </summary>
public class UtilClass
{
public override float CalculateMiddle(ArrayList arr)
{

}
public override int CalculateMiddle(Array arr)
{

}

}
}

کامپایلر اجازه همچین تعریفی نمیده!!!
من به این ساختار نیاز دارم.چه باید کرد

Babak-Aghili
جمعه 14 مرداد 1384, 21:04 عصر
1- کو ؟ استاتیک کو ؟

2 - اگر override است ... پس یک کلاسی هم بوده که Virtual ش را داشته ... پس چرا کلاستون را از اون مشتق نکرده اید ؟

titbasoft
جمعه 14 مرداد 1384, 22:00 عصر
همونطور که جناب عقیلی هم گفتند زمانی از یک کلاس مشتق می گیرید (Inheritance) و کلاس والد (base Class) شما یک متد هم نام با متدی داره که شما هم می خواهید از اون استفاده کنید باید از کیورد override استفاده کنید. اما اگر در یک کلاس بخواهید دو متد هم نام داشته باشید لازم نیست از این keyword استفاده کنید. پس در کد بالا فقط لازمه override رو در تعریف دو متدتون حذف کنید.

Mahdi Fahmideh
جمعه 14 مرداد 1384, 22:51 عصر
کد بصورت زیر است:
;
using System.Drawing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;

namespace TimeTable
{
///
/// Summary description for DataBaseObject.
///
public class UtilClass
{
public static float CalculateMiddle(ArrayList arr)
{

}
public static int CalculateMiddle(Array arr)
{

}

}
}
در اینجا من میخوام چند متد همنام در یک کلاس تعریف کنم که هر کدام کارکرد خاص خودش رو داره.
ضمن اینکه چون کاربرد اونها زیاد است میخوام بصورت static باشه تا بدون ایجاد یک وهله از کلاس از متد های ان استفاده کرد.

Babak-Aghili
جمعه 14 مرداد 1384, 23:29 عصر
** نقل قول : **
چون کاربرد اونها زیاد است میخوام بصورت static باشه .

چرا همچین برداشتی از استاتیک دارید ؟!!!!!!!!

--------
فراموش نکنید که به قول خودم! استاتیک ها ، بسیار نژاد پرست هستند و فقط خودشون با خودشون کار مکینند .... ...
حال اگر قصد فراخوانی این استاتیک ها را دارید ، یا باید بنویسید که UtilClass.CalculateMiddle یا یک شی از کلاس درست کنید و ......
...........
راستی .. اگه فرقشون فقط توی int , float است ... مطمئن نیستم ولی اگه float بگیرید .. خودش در صورت نیاز به int شاید به درستی cast کنه ها ...
------------------

vcldeveloper
شنبه 15 مرداد 1384, 03:15 صبح
دوست عزیز، این مسئله ربطی به static بودن توابع شما نداره، در #C برای اینکه بتونید توابع رو Overload کنید، باید signture اونها با هم فرق داشته باشه - یعنی تعداد یا نوع پارامترهای اونها باید با هم متفاوت باشه.
در مثال بالا شما سعی دارید توابعی تعریف کنید که هم نام هستند و نوع و تعداد پارامترهاشون هم یکسان هست.

titbasoft
شنبه 15 مرداد 1384, 09:43 صبح
signiture ها با هم تفاوت دارند اولی System.Array است و دومی System.Collections.ArrayList

به نظر من کد دومی مشکلی نداره.

Mahdi Fahmideh
شنبه 15 مرداد 1384, 23:08 عصر
"چرا همچین برداشتی از استاتیک دارید ؟!!!!!!!!"
خوب این برداشت من درست هم هست .یکی از کاربرد های متدهای static همینه.مثلا در فریم ورک متدهای کلاس math بدلیل کاربرد زیاد static تعریف شده.و ...
از همه اینها گذشته من یک همچین ساختاری لازم دارم:
متد هایی با نام یکسان ولی پارامتر متفاوت + بدون نیاز به ایجاد کلاس (بدلیل کاربرد زیاد اونها جالب نیست توی هر فرم که این کلاس رو لازم دارم اونها رو ایجاد کنم)

دوستان اگه راه حلی برای این مشکل من دارند ارایه بدند

Babak-Aghili
یک شنبه 16 مرداد 1384, 00:20 صبح
من یک همچین ساختاری لازم دارم:
متد هایی با نام یکسان ولی پارامتر متفاوت + بدون نیاز به ایجاد کلاس

گیجمون کردی!! قبلا که پارامترها مثل هم بودند و نوع برگشتی از توابع فرق میکرد ... حالا ...

شما خواهشا این دو تا فایل را که هرکدام هم دو سه صفحه بیشتر نیست را با دقت بخونید .
سپس اگر مشکلی بود در خدمتیم ....

Babak-Aghili
یک شنبه 16 مرداد 1384, 00:28 صبح
خب ...

شما همچین چیزی لازم دارین ؟ این را با توجه به آخرین شرح حالی که گفته بودین نوشتم...
دو تا متد استاتیک با اسم یکسان ولی پارامترهای متفاوت ... بعدش توی Main صداشون زدیم.

یک نگاه بندازید ....

Mahdi Fahmideh
یک شنبه 16 مرداد 1384, 18:31 عصر
"
گیجمون کردی!! قبلا که پارامترها مثل هم بودند و نوع برگشتی از توابع فرق میکرد ... حالا ...
"

عزیزم کد رو درست نگاه کن پارامتر ها مثل هم نیستند!!!!

Babak-Aghili
یک شنبه 16 مرداد 1384, 20:59 عصر
ok ...
حالا بالاخره با اون نمونه مثال و اون دو تا فایل که فرستاده بودم .. مشکل حل شد یا نه ؟

dot_net_lover2
دوشنبه 17 مرداد 1384, 00:08 صبح
به نظر من که باید حل شده باشه ، آخه مثال و متنهای آقا بابک خیلی خوب بود در این زمینه.

Babak-Aghili
دوشنبه 17 مرداد 1384, 00:31 صبح
امشب دیگه خوابم نمیره .. یک نفر هم پیدا شد که از من نی نی تعریف کنه !!

Mahdi Fahmideh
چهارشنبه 19 مرداد 1384, 23:19 عصر
با تشکر از فایلهاتون اقای عقیلی اون مشکلم حل شد.
اما این مشکلم چیکار باید کرد:
نیاز به 2 متد استاتیک که در پارامتر ورودی یکسان ولی در نوع برگشتی متفاوت باشه:
public static int DoSth(int x, int y)
{
return (x*y*123); // Hala Masalan !!
}

public static float DoSth(int x, int y)
{
float f= (float)x * 2.3f;
return f;
}
در این حالت کامپایلر خطای تعریف متد های همنام میده.

Babak-Aghili
پنج شنبه 20 مرداد 1384, 14:28 عصر
نمیشه !

آقای کشاورز هم که توضیح داده بودند براتون ...

نمیشه !