PDA

View Full Version : سوال: یک سوال در خصوص نحوه پاس دادن متغیرها در متد و برنامه ای که نوشتم



davood59
یک شنبه 22 اردیبهشت 1392, 18:54 عصر
سلام دوستان؛
وقتتون بخیر؛
لطفا اگه ممکنه به این برنامه که مقداری از اون رو تازه یاد گرفتم و استفاده کردم نگاه کنید:



using System;
class test
{
string Name;
int Age;

public test(string name, int age)
{
Name = name;
Age = age;
}

public int same(test ob)
{
int sum = 0;
if (Name ==ob.Name && Age == ob.Age)
sum+=2;
else if
(Name == ob.Name || Age == ob.Age)
sum++;
return sum;
}
}
class compare
{
static void Main(string[] args)
{
test ob1 = new test("ahmad", 45);
test ob2 = new test("Ahmad",45);
Console.WriteLine("you have {0} same paramets",ob1.same(ob2));
}
}


در اینجا و در متد same به چه نحوی بدون اینکه ob1.Name بنویسم؛ کامپایلر تشخیص داده که Name همون عضو متعلق به ob1 هستش؟ و من در واقع بدون نوشتن ob1.Name دارم اون رو با شیء ob2 مقایسه می کنم؟
در واقع سوال من توی این خط هستش:

if (Name ==ob.Name && Age == ob.Age)

همچنین اگه بخوام جستجوی انجام داده شده به حروف کوچیک و بزرگ حساس نباشه از چه دستوری باید استفاده کنم که حساسیت رو در نظر نگیره؟
ازتون ممنونم.

manij_mhm
یک شنبه 22 اردیبهشت 1392, 19:13 عصر
شما دارید تابع same رو روی متغیر ob1 فراخوانی می کنید.


ob1.same(ob2)

پس در تابع به جای متغیر های name , age مقادیر موجود در obj1 رو قرار میده

manij_mhm
یک شنبه 22 اردیبهشت 1392, 19:15 عصر
برای عدم حساسیت به یزرگی و کوچکی حروف می تونید دو رشته مورد نظرتون رو به حروف بزرگ تبدیل کنید و بعد مقایسه رو انجام بدید.

موفق باشید.

مهرداد صفا
دوشنبه 23 اردیبهشت 1392, 00:38 صبح
با سلام.
برای دسترسی به اعضای کلاس جاری، نام عضو به تنهایی کفایت می کند. مثلا:


this.Name=Name


پس در واقع

if (Name ==ob.Name && Age == ob.Age)
برابر با:
if (this.Name ==ob.Name && this.Age == ob.Age)
است و Name و Age مربوطه به شیئی است که متود آن در حال اجرا شدن است.