PDA

View Full Version : سوال: تعریف نوع داده Dynamic



naser2009
چهارشنبه 26 خرداد 1389, 14:20 عصر
سلام دوستان خسته نباشید
میخوام نوع داده ای تعریف کنم که بتونه سه نوع(string,float,int) رو داخل خودش نگه داره
دقیقا مثله نوع داده هایی که در جاوااسکریپت داریم
واین حالت باید امکان پذیر باشه
mynewdatatype a;
a='ali'
a=12.5
a=10
یعنی بتونه هر یک از نوع داده های (string,float,int) رو داخل خودش ذخیره کنه
مهم نیست به چه زبانی باشه ترجیحا با خانواده C ...
اگه کسی از دوستان کدشو داره یا میتونه راهنمایی کنه یا علی.
نکته: لطفا نگید که از نوع داده object در c# استفاده کنم.

s.khoshfekran
چهارشنبه 26 خرداد 1389, 14:45 عصر
از ArrayList استفاده کن

mohsensaghafi
چهارشنبه 26 خرداد 1389, 15:16 عصر
سلام دوست عزیز.
من فکر می کنم باید یه کلاس تعریف کنی که هر سه متغیر رو داشته باشه. بعد واسه عملگر = اون سه تا پیاده سازی مختلف بنویسی که هر کدوم با یک نوع داده خاص کار کنن. و یه متغییر که مشخص کنه که کدوم نوع داده فعال است. اگر باز هم مشکلی بود بگو تا توضیح بیشتر بدم.

naser2009
چهارشنبه 26 خرداد 1389, 18:07 عصر
سلام دوست عزیز.
من فکر می کنم باید یه کلاس تعریف کنی که هر سه متغیر رو داشته باشه. بعد واسه عملگر = اون سه تا پیاده سازی مختلف بنویسی که هر کدوم با یک نوع داده خاص کار کنن. و یه متغییر که مشخص کنه که کدوم نوع داده فعال است. اگر باز هم مشکلی بود بگو تا توضیح بیشتر بدم.
ممنون دوسته عزیز ولی تا اونجایی که من میدونم اگه منظورت operator overloading هست که باید بگم عملگر = سربارگذاری نمیشه البته تو c# ولی پیشنهادی که دادین درسته خودم هم همینو مد نظر داشتم ولی مشکل اینه که نمیشه عملگر = رو سربارگذاری کرد.
پیشنهادی دیگه ای دارین؟

#aliyari_C
پنج شنبه 27 خرداد 1389, 00:14 صبح
سلام
یک اصول در NET به نام type safe(نوع امن) وجود دارد که با کد شما جور در نمی آید ,
چیزی را که می خوای پیاده سازی کنی رو توضیح بده یعنی بخاطر چی می خوای این کا را بکنی.
__________________________________________________ __
چون به در یا می توانی راه یافت
سوی یک قطره چرا باید شتافــت

r00tkit
پنج شنبه 27 خرداد 1389, 00:34 صبح
فقط c#4


dynamic d = "geek";
Console.WriteLine(d);
Console.WriteLine(d.GetType());
d = 4;
Console.WriteLine(d);
Console.WriteLine(d.GetType());
d = 3.4;
Console.WriteLine(d);
Console.WriteLine(d.GetType());

اَرژنگ
پنج شنبه 27 خرداد 1389, 01:37 صبح
دوستان لطفا راهنمایی کنن
گیر میباشم!:گریه:

به جوابهایه mohsensaghafi (http://barnamenevis.org/forum/member.php?u=38817) و #aliyari_C (http://barnamenevis.org/forum/member.php?u=92259) دقت کن.
به جایه بازسازی جاواسکریپت در سی‌شارپ ، روشهایه درست سی‌شارپ را یاد بگیر. استفاده همینطوی تایپهایه داینامیک درست نیست.

naser2009
پنج شنبه 27 خرداد 1389, 10:22 صبح
به جوابهایه mohsensaghafi (http://barnamenevis.org/forum/member.php?u=38817) و #aliyari_C (http://barnamenevis.org/forum/member.php?u=92259) دقت کن.
به جایه بازسازی جاواسکریپت در سی‌شارپ ، روشهایه درست سی‌شارپ را یاد بگیر. استفاده همینطوی تایپهایه داینامیک درست نیست.
سلام دوسته من
من هم که نخواستم از این نوع داده در برنامه هام استفاده کنم
چون نوع داده های پویا type safe نیستند و هم برای allocation و deallocation نیاز به زمان دارند پس مقرون به صرفه نیستند من هم اینو میدونم:گریه:

فقط میخواستم یه Descriptor واسه این نوع داده تعریف کنم همین واسه درس pl
جواب کاربر محترم آقای mohsensaghafi بسیار به منظور من نزدیک بود . ذهنتو ببرین سمت سربارگذاری عملگر و عملیات پایه در c# نه استفاده از نوع داده هایی مثله dynamic یا object
این نوع داده رو باید خودمون تعریف کنیم.
با تشکر از توجه دوستان خوبم

naser2009
پنج شنبه 27 خرداد 1389, 10:39 صبح
سلام دوستان کد نمونه ای که تا اینجا پیش رفته..



class Descriptor
{
private int size;
private string type;
private object _value;
public object Value
{
get
{
return _value;
}
}
public Descriptor(int iValue)
{
size = sizeof(int);
type = "Int";
_value = iValue;
}
public Descriptor(float fValue)
{
size = sizeof(float);
type = "Float";
_value = fValue;
}
public Descriptor(string sValue)
{
size = sValue.Length;
type = "String";
_value = sValue;
}
public static implicit operator int(Descriptor descriptor)
{
return ((int)descriptor._value);
}
public static implicit operator float(Descriptor descriptor)
{
return ((float)descriptor._value);
}
public static implicit operator string(Descriptor descriptor)
{
return ((string)descriptor._value);
}
publicvoid Print()
{
Console.WriteLine("Type={0}, Size={1}, Value={2}", type, size, _value);
}
}

این کد کلاس descriptor است
واین هم کد کلاس Program که از Descriptor استفاده می کند.


Descriptor d1, d2, d3, d4;
d1 = new Descriptor(10);
d2 = new Descriptor(20.5f);
d3 = new Descriptor("Ali");
int i = d1;
float f = d2;
string s = d3;
d4 = d1;
//d2 = 12.5f;
//d2 = 10;
//d2 = "ali";

دوستان مشکل کار این سه خط کامنت شده می باشد چون C#‎‎ اجازه سربارگذاری عملگر = را نمی دهد.
فایل ها(کلاس ها) رو به ضمیمه هم ارسال کردم.

Alen
شنبه 19 تیر 1389, 20:12 عصر
دوست عزیز
یه نگاهی به این پست
http://barnamenevis.org/forum/showthread.php?t=233043
بیانداز
منم شبیه همین مشکل رو داشتم یکی لطفکرد کمکم کرد