PDA

View Full Version : سوال: متدی که مقدار برگشتی ندارد و ByRef هم نیست مقدار فرستنده را تغییر میدهد!! چرا؟ لطفا توضیح دهید.



Parham.D
چهارشنبه 03 آذر 1389, 18:26 عصر
سلام بر دوستان عزیز و اساتید گرام.

لطفا کدهای زیر را نگاه کنید.

کدها در فرم:





private void button1_Click(object sender, EventArgs e)
{
Bitmap bitmap = new Bitmap("C:\\Users\\Parham\\Desktop\\1288263970787251.jpg");
Font font = new Font("Arial", 12, FontStyle.Bold);
Brush brush = new SolidBrush(Color.Yellow);
Class1 class1 = new Class1();
class1.DrawStringToBitmap("Test", font, brush, 5, 5, bitmap);
pictureBox1.Image = (Image)bitmap;
}



کدها در یک کلاس:





public void DrawStringToBitmap(string text, Font font, Brush color, int x, int y, Bitmap bitmap)
{
Graphics graph = Graphics.FromImage(bitmap);
graph.DrawString(text, font, color, x, y);
}



اگر این کدها اجرا بشن؛ در PictureBox و در گوشه عکس یک نوشته حک میشود.


سوال: وقتی متد ما بدون بازگشت است، تغییر در آرگومان bitmap متد چطور میتواند مقدار فرستنده در فرم در زمان فراخوانی متد را تغییر دهد؟!! آیا bitmap متد از همان آدرس bitmap فرستنده در فراخوانی متد در فرم استفاده میکند؟


متشکر از راهنمایی شما . . .

alishokr
چهارشنبه 03 آذر 1389, 18:48 عصر
با عرض سلام.
دوست عزیز Bitmap کلاس هست ، و کلاس وقتی پاس داده میشه ، بصورت Reference عمل میکنه .
یعنی اگر به عنوان پارامتر ارسال بشه ، اگر تغییراتی روش اعمال بشه ، در جایی که به تابع پاس داده شده هم تغییر میکنه .
مثال زیر رو در نظر بگیر:


public class Test
{
public string Name {get;set;}
}

public static void Main()
{
var test = new Test {Name = "Test" };
ChangeObj(test);
Console.WriteLine(test.Name); // output: Just Kidding....
}

public static ChangeObj(Test test)
{
test.Name = "Just Kidding....";
}



با آرزوی موفقیت ...