Thursday, November 9, 2017

C# For Beginners, Part -44 ( Difference Between ToString() & Convert.ToString() )


আজকে আমরা ছোট্ট করে  Convert.ToString() & ToString() এর মধ্যে কি পারথক্য আছে ?? সেটা নিয়ে কথা বলার ট্রাই করবো ।। তার আগে , আমরা দুইটাই বযবহার করেই ছোট্ট একটা প্রোগ্রাম করে আসি --------------

using System;

 public class Program
    {
        public static void Main()

        {
            int a = 23;
            Console.WriteLine(a.ToString());
            Console.WriteLine(Convert.ToString(a));
            Console.ReadKey();
        }

    }

এখানে , আমরা একটা স্ট্রিং নিয়েছি - সেটাকে স্ট্রিং-এ কনভার্ট করেছি । তবে দুই পদ্ধতিতে !! একবার  ToString() ব্যবহার করে , আরেকবার Convert ক্লাসের ToString() মেথোডে ইন্টিজার ভ্যারিয়েবলকে প্যারামিটার হিসেবে পাস করিয়ে ।।  দুই ক্ষেত্রেই , আমরা একই রকম আউটপুট দেখতে পাচ্ছি , আপাতভাবে এর মধ্যে কোনো তফাত মনে হচ্ছে না । কিন্তু এদের ভেতরেও পারথক্য আছে । ।

চলো নিচের কোড দেখে আসি , একটু ---------

using System;

namespace joy
{
    public class Program
    {
        public static void Main()

        {
            int? a = null;
            Console.WriteLine(Convert.ToString(a));
            Console.ReadKey();
        }

    }
}

কোনো , একটা কারণে - মনে করো , আমার ভ্যারিএবলে নাল সেট করা আছে , এখন একে যদি আমি  Convert ক্লাসের ToString() মেথোডে পাঠাই , তাহলে - আমাদের কনভার্টেড স্ট্রিং ও কিন্তু , নাল হবে , তাই না ??? কোনো রকম এক্সসেপশন পাবা না ।। কিন্তু , চলো এবার নীচের প্রোগ্রামটা রান করাই !!!

  using System;

  public class Program
    {
        public static void Main()

        {
            int? a = null;
            Console.WriteLine(a.ToString());
            Console.ReadKey();
        }

    }

ঠিকঠাক আউটপুট পেলে !! কোনোরকম এরর হবারও কথা নয় , এখন তোমাদের মনে প্রশ্ন আসার কথা যে - পার্থক্য টা কোথায় ???
এবার চলো , একটা ক্লাসের অব্জেক্ট ক্রিয়েট করে এই একই কাজ করি , দেখি কি হয় ???

using System;

namespace joy
{
    public class Program
    {
        public static void Main()

        {
            Customer a = null;
            Console.WriteLine(Convert.ToString(a));
            Console.ReadKey();
        }

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

আমরা  শুধু  Convert  ক্লাস ব্যবহার করে ,করেছি ।। কোনোরকম এরর পাবাও না , যদিও তুমি  Customer ক্লাসের রেফারেন্স ভ্যারিয়েবলে  null সেট করেছো । । তো চলো , এবার আমরা আরেকভাবে ব্যবহার করি ------

using System;

namespace joy
{
    public class Program
    {
        public static void Main()

        {
            Customer a = null;
            Console.WriteLine(a.ToString());
            Console.ReadKey();
        }

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

রান করিয়ে দেখো , কি হয় ?? আশা করি এরর পাবা !! নীচের মতো ------



 সুতরাং বুঝতেই পারছো , এবার পার্থক্য কোথায় ??? যেখানে , Convert.ToString() নাল হ্যান্ডল করতে পারে , সেখানে -  ToString() সেটা হ্যান্ডল করতে পারে না ,null reference exception পাবা  ।। এটাই এদের ভেতরে মূল পার্থক্য  !! তবে যখন তুমি একটা ক্লাসের রেফারেন্স ভ্যারিয়েবল ক্রিয়েট করবে , ঠিক তখনই এরকম হবে , এটা মাথায় রেখো , তাছাড়া দুইটা একইরকম আচরণ করবে কিন্তু ।।

No comments:

Post a Comment