کدهای جالب - String Interning و Transitivity در C#
چهارشنبه 22 شهریور 1391 12:49 PM
اگر کمی با ریاضیات آشنا باشید، می دانید که تساوی(Equality) داراری ویژگی هایی است که تعدی(Transitivity) یکی از آنها می باشد،
با این مفهوم آشنا نیستید؟ سادست:
If A=B And B=C Then A=C
آیا به نظر شما این ویژگی در تمامی شرایط و همیشه در C# وجود دارد؟
یه نمونه کذ زیر توجه کنید:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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();
}
}
}
نتیجه:
1
2
3
4
obj == str : True
str == str2 : True
obj == str2 : False
با اجرای کد فوق در می یابید که با اینکه متغیر های obj,str,str2 دارای یک مقدار هستند، اما ویژگی تعدی در آنها صدق نمی کند و برخلاف انتظار، عبارت obj == str2 مقدار false را برمی گرداند،
حال می خواهیم ببینیم این اتفاق چگونه رخ داده است.
در پایان این بخث به نتایج جالبی خواهیم رسید،
پیشاپیش از شرکت دوستان در بخث سپاسگزارم،/