سلام دوستان عزیز،
از این پس سلسله مطالبی تحت عنوان "کدهای جالب" در این بخش قرار داده شده و از کاربران خواسته می شود که بر روی آن قطعه کد به بحث و تبادل نظر پردازند، هر نمونه کد هدف خاصی را دنبال می کند که تا انتهای بحث به طور کامل مشخص خواهد شد. در صورتی که در هر نمونه کد از منبع دیگری نیز کمک گرفته شده باشد، در انتهای بحث اعلام خواهد شد،

کدهای جالب - شماره 1 - String Interning و Transitivity در C#‎‎‎‎‎‎
اگر کمی با ریاضیات آشنا باشید، می دانید که تساوی(Equality) داراری ویژگی هایی است که تعدی(Transitivity) یکی از آنها می باشد،
با این مفهوم آشنا نیستید؟ سادست:

If A=B And B=C Then A=C

آیا به نظر شما این ویژگی در تمامی شرایط و همیشه در C#‎‎‎‎‎‎ وجود دارد؟
یه نمونه کذ زیر توجه کنید:

using System;
namespace InterestingCodes.No1
{
class Program
{
static void Main(string[] args)
{
object obj = "String";
string str = "String";
string str2 = System.Type.GetType("System.String").Name;
Console.WriteLine("obj == str : {0}", obj == str);
Console.WriteLine("str == str2 : {0}", str == str2);
Console.WriteLine("obj == str2 : {0}", obj == str2);
Console.ReadLine();
}
}
}

نتیجه:

obj == str : True
str == str2 : True
obj == str2 : False

با اجرای کد فوق در می یابید که با اینکه متغیر های obj,str,str2 دارای یک مقدار هستند، اما ویژگی تعدی در آنها صدق نمی کند و برخلاف انتظار، عبارت obj == str2 مقدار false را برمی گرداند،
حال می خواهیم ببینیم این اتفاق چگونه رخ داده است.
در پایان این بخث به نتایج جالبی خواهیم رسید،
پیشاپیش از شرکت دوستان در بخث سپاسگزارم،/

پ.ن: از همفکری آقای کشاورز نیز ممنونم./