PDA

View Full Version : یک سوال از متد ها



mehdiba3
سه شنبه 10 اردیبهشت 1392, 09:25 صبح
با سلام خدمت دوستای خوبم.
برنامه ای نوشتم که سن فرد رو حساب می کنه.
خواستم ببینم بنظرتون این روش برنامه نویسی درسته؟
بنظر شما استفاده از متد در این برنامه کاربرد داره و اگه داره چطور ازش استفاده کنم؟
یک قسمت از برنامه هست که زیاد تکرار مشه

lblday.Text = (day - dayu).ToString()+"روز";
lblmoon.Text = (moon - moonu).ToString()+"ماه";
lblyers.Text = (yers - yersu).ToString() + "سال";
خواستم براش یک متد بنویسم و هرجا نیازه فراخوانیش کنم اما نمیدونم چطوری باید بهش پارامتر بدم
از دوستای خوبم اگه کسی میتونه بگه چطوری این متد رو بنویسم (البته در صورت نیاز ) تشکر می کنم
اینم کل کد برنامس که سن فرد رو حساب می کنه

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace محاسبه_سن
{
public partial class Form1 : Form

{

public Form1()
{
InitializeComponent();
}



private void textBox2_TextChanged(object sender, EventArgs e)
{

}

private void Form1_Load(object sender, EventArgs e)
{

}

private void txtyers_TextChanged(object sender, EventArgs e)
{

}

private void button1_Click(object sender, EventArgs e)
{
int day;
int moon;
int yers;
int dayu;
int moonu;
int yersu;
day = Int32.Parse(txtday.Text);
moon = Int32.Parse(txtmoon.Text);
yers = Int32.Parse(txtyers.Text);
dayu = Int32.Parse(txtdayu.Text);
moonu = Int32.Parse(txtmoonu.Text);
yersu = Int32.Parse(txtyersu.Text);

if (((day < dayu) && (moon < moonu) ))
{

yers = yers - 1;
moon = moon + 11;
day = day + 30;


lblday.Text = (day - dayu).ToString()+"روز";
lblmoon.Text = (moon - moonu).ToString()+"ماه";
lblyers.Text = (yers - yersu).ToString() + "سال";
}

else if (moon < moonu)
{
yers = yers - 1;
moon = moon + 12;
lblday.Text = (day - dayu).ToString() + "روز";
lblmoon.Text = (moon - moonu).ToString() + "ماه";
lblyers.Text = (yers - yersu).ToString() + "سال";
}
else if (day<dayu)
{
moon = moon - 1;
day = day + 30;
lblday.Text = (day - dayu).ToString() + "روز";
lblmoon.Text = (moon - moonu).ToString() + "ماه";
lblyers.Text = (yers - yersu).ToString() + "سال";
}
else

{


lblday.Text = (day - dayu).ToString();
lblmoon.Text = (moon - moonu).ToString();
lblyers.Text = (yers - yersu).ToString();
}





}

private void button2_Click(object sender, EventArgs e)
{
txtday.Text = string.Empty;
txtdayu.Text = string.Empty;
txtmoon.Text = string.Empty;
txtyers.Text = string.Empty;
txtyersu.Text = string.Empty;
txtmoonu.Text = string.Empty;
lblday.Text = string.Empty;
lblmoon.Text = string.Empty;
lblyers.Text = string.Empty;

}
}
}

Arman jamalifar
سه شنبه 10 اردیبهشت 1392, 09:49 صبح
برای اینکه خوانایی برنامت بره بالا یه کلاس درست کن( تو solution ex کلیک کن رو اسم پروژت راست کلیک بعد Add بعدش new item بعدش class رو انتخاب کن)
حالا تو این کلاس هر چند تا دوست داری متد بنویس
متغییر هاتم از نوع public static تعریف کنی از همه جای برانامت دسترسی داری بهشون
موفق باشی

mehdiba3
سه شنبه 10 اردیبهشت 1392, 10:00 صبح
برای اینکه خوانایی برنامت بره بالا یه کلاس درست کن( تو solution ex کلیک کن رو اسم پروژت راست کلیک بعد Add بعدش new item بعدش class رو انتخاب کن)
حالا تو این کلاس هر چند تا دوست داری متد بنویس
متغییر هاتم از نوع public static تعریف کنی از همه جای برانامت دسترسی داری بهشون
موفق باشی
ممنون از راهماییت ولی من تا حالا از متد ها در حد فرستادن یک پارامتر استفاده کردم مثل این کد که مساحت دایره رو حساب می کنه

private double CalculateAreaFromRadius(double radius)
{
// Declare variables
double dblRadiusSquared;
double dblResult;
// Square the radius
dblRadiusSquared = radius * radius;
// Multiply it by pi
dblResult = dblRadiusSquared * Math.PI;
// Return the result
return dblResult;
}
اما تو این برنامه که چنتا ورودی داره نمیدونم چیار کنم . میشه بهم کمک کنید دوست عزیز؟ ممنون می شم

aliasghar2
سه شنبه 10 اردیبهشت 1392, 10:52 صبح
واسه فرستادن چنتا پارامتر باید این جوری عمل کنی
public int calAge( int day,int moon,int yers,int dayu,int moonu,int yersu)
{
// کد مربوط به محاسبه
}
البته این طور که من میبینم سه تا پارامتر خروجی داری که می تونی ار ref استفاده کنی اینجوری

public int calAge( int day,int moon,int yers,int dayu,int moonu,int yersu, ref int rday ,ref int rmoon , ref int ryear)
{
// کد مربوط به محاسبه
}

mehdiba3
چهارشنبه 11 اردیبهشت 1392, 10:58 صبح
دوست عزیز این کارو کردم ولی متاسفانه برنامه درست محاسبات رو برام انجام نیمده . یعنی متد رو فراخونی می کنم اما مشکل اینجاست که برنامه شامل چنتا شرط هست و شرط ها محاسباط رو در صورت درست بودن عوض می کنند . ولی من یک متد بیشتر ندارم که کار ثابتی انجام میده و نمیتونه با توجه به شرط ها محاسباتش رو عوض کنم.
بنظرتون چیکار کنم؟

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

متد:
private void com(int day, int dayu, int moon,int moonu,int yers,int yersu)
{
lblday.Text = (day - dayu).ToString() + "روز";
lblmoon.Text = (moon - moonu).ToString() + "ماه";
lblyers.Text = (yers - yersu).ToString() + "سال";
}



if (((day < dayu) && (moon < moonu) ))
{

yers = yers - 1;
moon = moon + 11;
day = day + 30;
com(day,dayu,moon,moonu,yers,yersu);

// lblday.Text = (day - dayu).ToString()+"روز";
//lblmoon.Text = (moon - moonu).ToString()+"ماه";
//lblyers.Text = (yers - yersu).ToString() + "سال";
}

wolf_majid
چهارشنبه 11 اردیبهشت 1392, 12:13 عصر
یک کلاس به صورت زیر تعریف کن
internal class Age
{
//این ها فیلدهایی هستند که اطلاعات زا ذخیره می کنند
private int _day;
private int _moon;
private int _year;

// سازنده کلاس برای مقدار دهی فیلدها
public Age(int day, int moon, int year)
{
_day = day;
_moon = moon;
_year = year;
}

//سازنده کلاس پیش فرض
public Age()
: this(0, 0, 0)
{

}

//پروپرتی هایی برای دسترسی به فیلدهای کلاس
public int Day
{
set { _day = value; }
get { return _day; }
}

public int Moon
{
set { _moon = value; }
get { return _moon; }
}

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

//متدی که پردازش مورد نظر را انجام میدهد و خروجی از نوع کلاس بر می گرداند
public static Age Process(Age age1, Age age2)
{
/*
تمامی شرط هات را اینجا بنویس
به جز مقدار دهی هات مثل کد زیر
lblday
*/
}

}

طریقه استفاده :
Age age1=new Age(10,20,30);
Age age2=new Age(40,50,60);
Age ageResult = Age.Process(age1, age2);
lblDay.Text = ageResult.Day.ToString();
//و الی آخر