PDA

View Full Version : فراخوانی کلاس در سی شارپ



sony1983
پنج شنبه 31 فروردین 1391, 12:14 عصر
با درود و احترام

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

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication3
{
class Time
{
// Data Members
int hour, minute, second;
int year, month, day;

public int Hour
{
get
{
return hour;
}
set
{
if (0 <= value && value <= 23)
hour = value;
else if (value > 23)
{
hour = value;
while (hour > 23)
{
hour -= 24;
Day += 1;
}
}
else // value < 0
{
hour = value;
while (hour < 0)
{
hour += 24;
Day = Day - 1;
}
}
} }

public int Minute//دقیقه
{
get
{
return minute;
}
set
{
if (0 <= value && value <= 60)

minute = value;


else if (value > 60)
{

minute -= 60;
hour += 1;
}



else // value < 0
{
minute = value;
while (minute < 0)
{
minute -= 60;
hour= hour - 1;
}
}

}
}


public int Second //ثانیه
{
get
{
return second;
}
set
{
if (0 <= value && value <= 60)
second = value;
else if (value > 60)
{

second -= 60;
minute += 1;
}

else// value < 0
{
second = value;
while (second < 0)
{
second -= 60;
minute +=1 ;
}
} } }


/*
public int Hour//saat
{
get
{
return hour;
}
set
{
if (0 <= value && value <= 24)
hour = value;
else if (hour > 23)
{
hour -= 24;
Day += 1;

}

else // value < 0
{
hour = value;
while (hour < 0)
{
hour += 23;
Day = Day - 1;

}
}
}
}


*/


public int Day
{
get
{
return day;
}
set
{
if (
(month <= 6 && 1 <= value && value <= 31) ||
(month > 6 && 1 <= value && value <= 30))
day = value;
else
{
day = value;
while (!(
(month <= 6 && 1 <= day && day <= 31) ||
(month > 6 && 1 <= day && day <= 30)))
{
if (month <= 6 && day > 31)
{
day -= 31;
Month += 1;
}
else if (month <= 7 && day < 1)
{
day += 31;
Month = Month - 1;
}
else if (month > 6 && day > 30)
{
day -= 30;
Month += 1;
}
else // month > 7 && value < 1
{
day += 30;
Month -= 1;
}
}
}
}
}


public int Month
{
get
{
return month;
}
set
{
if (1 <= value && value <= 12)
month = value;
else if (value > 12)
{
month = value;
while (month > 12)
{
month -= 12;
Year += 1;
}
}
else // value < 1
{
month = value;
while (month < 1)
{
month += 12;
Year -= 1;
}
}
}
}

public int Year
{
get
{
return year;
}
set
{
year = value;
}
}


/* public Time() // default constructor
{
Year = 1391;
Month = 1;
Day = 1;
Hour = 3;
Minute = 0;
Second = 0;
}
*/
public Time(int y, int m = 1, int d = 1,
int h = 3, int min=0, int s = 0)
{
Year = y;
Month = m;
Day = d;
Hour = h;
Minute = min;
Second = s;
}
/*
void AddYear(int y)
{
Year += y;
}

void AddMonth(int m)
{
Month += m;
while (Month > 12)
{
Month -= 12;
Year++;
}
}
void AddSecond(int m)//ثانیه
{
Second +=Second;
while (Second > 60)
{
Second -= 60;
Second++;
}
}
void AddMinute(int m)//دقیقه
{
Minute+=1;
while (Minute > 60)
{
Minute -= 60;
Minute++;
}
}
void Addsecond(int m)//ثانیه
{
second+=1;
while (second > 60)
{
second -= 60;
second++;
}
}
void addDay(int d)
{
day += d;
while ((month <= 6 && day > 31) ||
(month > 6 && day > 30))
{
if (month <= 6)
{
day -= 31;
month++;
}
else // month > 6
{
day -= 30;
// addMonth(1);

}

}
}*/
}
}




حالا من میخوام متغیر کلاس رو در برنامه فرخوانی کنم
متاسفانه اخطار میده ممنون میشم راهنمایی بفرمایید

Itist82
پنج شنبه 31 فروردین 1391, 15:29 عصر
مشکل دقیقتون چیه؟ شما مثلا می نویسید

Time ti=new Time();

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


public class Time{
...
}

متن دقیق خطا رو بگید تا بهتر بشه راهنمایی کرد

sony1983
جمعه 01 اردیبهشت 1391, 17:48 عصر
من این کلاس رو تعریف کردم بعدش میخوام اونو توبرنامه بخونم مثلا دو تا پارامتربه عنوان ورودی بگیره و تو خروجی براسال اون پارامتر داده رو نشون مثلا ثانیه -112 وارد بشه ثانیه رو تبدیل به ثانیه درست کنه و چاپ کنه البته الان تبدیل و محاسباتش درسته اما خب تو برنامه فراخوانی نمیشه.ممنون میشم راهنماییم کنید

sony1983
شنبه 02 اردیبهشت 1391, 18:02 عصر
ممنون میشم اساتید کمکی بفرمایند

amirrr3
شنبه 02 اردیبهشت 1391, 18:29 عصر
شاید namespace ها رو متفاوت نوشتی؟

JaguarXF
شنبه 02 اردیبهشت 1391, 18:36 عصر
شایر مشکلات :

اون کامنتهای فارسی رو وسط کد حذف کن انگلیسی بنویس

کلاسهای استتیک رو مطالعه کن و بهش فکر کن که آیا میتونی این رو بصورت کلاس استتیک بنویسی یا نه

sony1983
شنبه 02 اردیبهشت 1391, 18:49 عصر
خب این ارور نداره اما جواب نمیده میخوام برای نمونه دو مقدار رو از کلاس در برنامه از هم کم کنم.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication3
{
class Time1
{
static void Main(string[] args)
{
Time test = new Time(2012, 4, 19, 12, 15, 10);
Time test2 = new Time(2010, 4, 20, 12, 15, 08);
Time test3 = test + test2;
Console.WriteLine("Today is day " + test.Day + " of month " + test.Month + " of year " + test.Year);
Console.ReadKey();
}
}
public class Time
{
public static Time operator +(Time x, Time y);//سربار گذاري عمل جمع در کلاس

// public Time z = new Time ();

// z.Second=x.Second + y.Second;
// z.minute = x.minute + y.minute;
// z.hour = x.hour + y.hour;
// z.month = x.month + y.month;
// z.day = x.day + y.day;
// z.year = x.year + y.year;
// return z;

// Data Members
int hour, minute, second;
int year, month, day;
public int Hour
{
get
{
return hour;
}
set
{
if (0 <= value && value <= 23)
hour = value;
else if (value > 23)
{
hour = value;
while (hour > 23)
{
hour -= 24;
Day += 1;
}
}
else // value < 0
{
hour = value;
while (hour < 0)
{
hour += 24;
Day = Day - 1;
}
}
}
}
public int Minute//دقيقه
{
get
{
return minute;
}
set
{
if (0 <= value && value <= 60)
minute = value;

else if (value > 60)
{
minute -= 60;
hour += 1;
}

else // value < 0
{
minute = value;
while (minute < 0)
{
minute -= 60;
hour = hour - 1;
}
}
}
}

public int Second //ثانيه
{
get
{
return second;
}
set
{
if (0 <= value && value <= 60)
second = value;
else if (value > 60)
{
second -= 60;
minute += 1;
}
else// value < 0
{
second = value;
while (second < 0)
{
second -= 60;
minute += 1;
}
}
}
}

/*
public int Hour//saat
{
get
{
return hour;
}
set
{
if (0 <= value && value <= 24)
hour = value;
else if (hour > 23)
{
hour -= 24;
Day += 1;
}
else // value < 0
{
hour = value;
while (hour < 0)
{
hour += 23;
Day = Day - 1;
}
}
}
}

*/

public int Day
{
get
{
return day;
}
set
{
if (
(month <= 6 && 1 <= value && value <= 31) ||
(month > 6 && 1 <= value && value <= 30))
day = value;
else
{
day = value;
while (!(
(month <= 6 && 1 <= day && day <= 31) ||
(month > 6 && 1 <= day && day <= 30)))
{
if (month <= 6 && day > 31)
{
day -= 31;
Month += 1;
}
else if (month <= 7 && day < 1)
{
day += 31;
Month = Month - 1;
}
else if (month > 6 && day > 30)
{
day -= 30;
Month += 1;
}
else // month > 7 && value < 1
{
day += 30;
Month -= 1;
}
}
}
}
}

public int Month
{
get
{
return month;
}
set
{
if (1 <= value && value <= 12)
month = value;
else if (value > 12)
{
month = value;
while (month > 12)
{
month -= 12;
Year += 1;
}
}
else // value < 1
{
month = value;
while (month < 1)
{
month += 12;
Year -= 1;
}
}
}
}
public int Year
{
get
{
return year;
}
set
{
year = value;
}
}

/* public Time() // default constructor
{
Year = 1391;
Month = 1;
Day = 1;
Hour = 3;
Minute = 0;
Second = 0;
}
*/
public Time(int y, int m = 1, int d = 1,
int h = 3, int min = 0, int s = 0)
{
Year = y;
Month = m;
Day = d;
Hour = h;
Minute = min;
Second = s;
}
/*
void AddYear(int y)
{
Year += y;
}
void AddMonth(int m)
{
Month += m;
while (Month > 12)
{
Month -= 12;
Year++;
}
}
void AddSecond(int m)//ثانيه
{
Second +=Second;
while (Second > 60)
{
Second -= 60;
Second++;
}
}
void AddMinute(int m)//دقيقه
{
Minute+=1;
while (Minute > 60)
{
Minute -= 60;
Minute++;
}
}
void Addsecond(int m)//ثانيه
{
second+=1;
while (second > 60)
{
second -= 60;
second++;
}
}
void addDay(int d)
{
day += d;
while ((month <= 6 && day > 31) ||
(month > 6 && day > 30))
{
if (month <= 6)
{

day -= 31;
month++;
}
else // month > 6
{
day -= 30;
// addMonth(1);
}
}

}*/
}
}

sony1983
شنبه 02 اردیبهشت 1391, 18:54 عصر
کلاس ها ی استاتیک از همه جا قابل دسترسی اند من اومدم کلاس رو پابلیک تعریف کردم و توی یک برنامه جا دادم پابلیک چون بتونه فراخوانی بشه و خروجی داشته باشه حالا برنامه بالا خروجی بهم نمیده نمیدونم چرا اما میدونم که چندین ساعته گیجم کرده چون اول کارم شاید چند ده ساعت تو اینترنت گشتم اما چزیز درستی دستگیرم نشده از کتاب هاشمیان تا اسلام احمد زاده و جزوه ها همشو کلاس ها رو خوندم اما نتونستم به نتیجه برسم . کمک اساتید رو فراموش نمیکنم.ممنوم

sony1983
شنبه 02 اردیبهشت 1391, 18:55 عصر
شاید namespace ها رو متفاوت نوشتی؟
به هر دو صورت چک کردم

Itist82
یک شنبه 03 اردیبهشت 1391, 11:55 صبح
بد نیست به جای سربار گذاری عملگر یه دور امتحان کنی که آیا می توی یه متد معمولی و البته استاتیک رو از این کلاس توی برنامه اصلی صدا بزنی یا نه. ببینید در اون صورت خروجی رو بهتون بر می گردونه یا نه