PDA

View Full Version : برگرداندن مقدار از یک کلاس



Himalaya
پنج شنبه 13 دی 1386, 15:57 عصر
چه جوری میشه از یک کلاس چند مقدار با انواع مختلف برگشت داده بشه.مثلا 2 تا int و 1 bool

hassan razavi
پنج شنبه 13 دی 1386, 16:06 عصر
اگه منظورتون متد یک کلاس هست می تونید از پارامترهای out استفاده کنید.

اَرژنگ
جمعه 14 دی 1386, 15:16 عصر
به نظر من،جواب جناب رضوی بهترین و درست‌ترین روش برایه اینکار است.

یک روش که خودم هم ازش استفاده نکردم و برایه برگرداندنه تعداد کمی از پارامترها اصلاً توصیه نمیکنم، استفاده از ArrayList است. چونکه ArrayList به نوع داده‌ها اهمیت نمیده.
اگر تعداد پارامترها و نوعشان را قبل از اجرا نمیشه دانست، ممکن است که این روش به کار بیاد. (منتها من توصیه میکنم که به عنوان آخرین روش از این استفاده بشد، اگر کسی روش دیگری برایه این حالت دارد پیشنهاد کند).

mohammad272005
شنبه 15 دی 1386, 02:21 صبح
classProgram
{
staticvoid Main(string[] args)
{
string filePath = @"C:\temp.txt";
DateTime creationTime;
long size;
if (GetInfo(filePath, out creationTime, out size))
{
Console.WriteLine("Creation Time: " + creationTime);
Console.WriteLine("Size: " + size);
}
}
privatestaticbool GetInfo(string filePath, outDateTime creationTime, outlong size)
{
creationTime = DateTime.MinValue;
size = 0;
if (!System.IO.File.Exists(filePath))
returnfalse;
System.IO.FileInfo file = new System.IO.FileInfo(filePath);
creationTime = file.CreationTime;
size = file.Length;
returntrue;
}
}

اَرژنگ
شنبه 15 دی 1386, 02:48 صبح
با تشکر از مثالتان،ولی فکر کنم میشه یکمی ساده‌ترش کرد:(نکته: این کد کار نمیکند، به دلیل اینکه پارامترهایه out حتما باید در داخل متد مقداردهی شوند، اگر میخواهید که بعد از بازگشت از متد پارامترهها مقادیری که بهشان پاس داده شده بود را برگردانند به جایه out از ref باید استفاده شود, مثال پائین تر، با تشکر از محمدجان که این اشکال را به توجه من آوردند )




class Program
{
static void Main(string[] args)
{
string filePath = @"C:\temp.txt";

if (System.IO.File.Exists(filePath))
{
DateTime creationTime = DateTime.MinValue;
long size = 0;
GetInfo(filePath, out creationTime, out size));
Console.WriteLine("Creation Time: " + creationTime);
Console.WriteLine("Size: " + size);
}
}
private static void GetInfo(string filePath, outDateTime creationTime, outlong size)
{
if (!System.IO.File.Exists(filePath)) return;

System.IO.FileInfo file = new System.IO.FileInfo(filePath);
creationTime = file.CreationTime;
size = file.Length;
}
}

mohammad272005
شنبه 15 دی 1386, 03:10 صبح
دوست من، آرژنگ جان، برنامة شما به دلیل زیر کار نمی کنه:
Error 1 The out parameter 'creationTime' must be assigned to before control leaves the current method F:\Programming\Temp\ConsoleApplication13\ConsoleAp plication13\Program.cs 26 17 ConsoleApplication13

اَرژنگ
شنبه 15 دی 1386, 03:57 صبح
دوست من، آرژنگ جان، برنامة شما به دلیل زیر کار نمی کنه:
Error 1 The out parameter 'creationTime' must be assigned to before control leaves the current method F:\Programming\Temp\ConsoleApplication13\ConsoleAp plication13\Program.cs 26 17 ConsoleApplication13

بله درست میفرمائید،پارامترهایه out احتیاج به مقداردهی در داخل متد دارند، و سوالی که پیش میاد این است که چگونه همان مقداری را که بهشان ارسال شد را میشود برگرداند؟ که استفاده از ref برایه اینکار میاد (نکته: فقط موقعی باید از ref استفاده شود که بخواهیم مقدار ارسال شده را برگردانند وگرنه استفاده از out حتما توصیه میشود)



class Program
{
static void Main(string[] args)
{
string filePath = @"C:\temp.txt";

if (System.IO.File.Exists(filePath))
{
DateTime creationTime = DateTime.MinValue;
long size = 0;
GetInfo(filePath, ref creationTime, ref size);
Console.WriteLine("Creation Time: " + creationTime);
Console.WriteLine("Size: " + size);
}
}

private static void GetInfo(string filePath, ref DateTime creationTime, ref long size)
{
if (!System.IO.File.Exists(filePath)) return;

System.IO.FileInfo file = new System.IO.FileInfo(filePath);
creationTime = file.CreationTime;
size = file.Length;
}
}