Kernel Mode Developer
RootKitSMM@Yahoo.com
ادامه ..
از همین وبلاگ:
CLR hostingIn this upcoming series of blogposts on "CLR Hosting" I'm going to tell you how you can take benefit of the .NET Framework v2.0's CLR Hosting API in order to take advantage of the power of the CLR inside your own applications. Together with a series on ".NET Framework internals" I have the intention to offer you a collection of posts that answer some common questions I did receive in the last couple of months/years and that I've asked myself too before I decided to dive into this stuff a little deeper.
Kernel Mode Developer
RootKitSMM@Yahoo.com
با تشكر از ميثم جان به خاطر لينك هاي خوبي كه قرار دادن .
بنده يه سوال واسم پيش اومده . البته خيلي سعي كردم از داخل متن همون سايت به جوابم برسم ولي خيلي زبانم خوب نيست . با گوگل ترنسليت هم سعي كردم ولي بازم چيزي دستگيرم نشد .
دليل اين مورد چيه :
با تشكر از اساتيد بزرگوار ........What is the difference between == and object.Equals
سلام.
برای value type ها، مثل int، byte و ... تفاوتی نمیکنه، اما برای Reference Type ها این دو دستور متفاوت عمل می کنن.
operator == هنگامی استفاده میشه که بخواهید هویت دو Entity رو با هم مقایسه کنید. به این کد دقت کنید:
Font font1 = new Font("verdana", 12f, FontStyle.Bold);
Font font2 = new Font("verdana", 12f, FontStyle.Bold);
Console.Write(font1 == font2); /*FALSE*/
Console.Write(font1.Equals(font2)); /*TRUE*/
اینجا دارم دو تا فونت با مشخصات یکسان ایجاد میکنم. هر دو Verdana با سایز 12 و Bold هستن، پس با عملا با هم برابرن. همونطوریکه در کد فوق میبینید، font1==font2 نیستش، چون Reference به این دو فونت متفاوته. در واقع اونها دارن به دو object متفاوت Refer میکنن.
اما font1.Equals(font2) هستش، چون هر دو فونت Verdana با سایز 12 و Bold هستن.
موفق باشید.
چهار روش مقایسه در C#
https://barnamenevis.org/showth...8C%D8%B3%D9%87
پست همزمان
سلام علی رضا
در value type ها Object.Equals با == فرقی نداره هر دو مقدار رو مقایسه می کنن
ولی در reference types ها با هم فرق دارن
در این توع تایپ ها ==فقط زمانی true برمی گردونه که وقتی هر دو object به یه جا تو heap اشاره کنن برابر این تابع می شه Object.ReferenceEquals یعنی کلا دو object یه چیز باشن
ولی Object.Equals مقدار های دو object رو مقایسه می کنه نه جایی که به هم اشاره می کنن با اینکه string ها reference type هستن ولی موقع مقایسۀ دو رشته ، رویه فرق می کنه
ببین
https://barnamenevis.org/showthread.php?t=184304
البته قبلا تو وبلاگ Eric Lippert دیده بودم
Kernel Mode Developer
RootKitSMM@Yahoo.com
البته تابع equal به هیچ وجه به هوشمند نیست و خوشبختانه قابلیت override داره.
برای مثال شما میتونی بگی که اگه دو تا آبجکت که از کلاس Person ساخته شده اند؛ نام و نام خانوادگیشان یکی است؛ با هم equal هستند؛ حتی اگر جنسیتشان هم فرق کند.
البته این بدیهی است؛ اما خواستم توصیه کنم قابلیت override این متد مفید رو از دست ندید.