Thursday, November 2, 2017

C# For Beginners , Part- 40 ( Attributes )

আজকে আমরা Attribute নিয়ে কথা বলবো ।। এটা ব্যবহারের ফলে  ,আমরা প্রোগ্রামের   রানটাইমে অনেক কিছু ইনফমেশন (Declarative Information) পাবো । এই জন্য , Attribute ইউজ করবো আমরা ।। আমরা যদি , একটা প্রোগ্রাম রান করার সময় কম্পাইলার এরর ও ওয়ার্নিং কেও কাস্টোমাইজ করতে চাই , আমাদের ইচ্ছেমতো শো করাতে চাই , তাহলে আমরা Attribute ইউজ করবো ।। চলো , নিচের কোড দেখি -----

using System;

using System.Collections.Generic;

   public class Program
    {
        public static void Main()
        {
            int b = Calculator.add(10, 20);
            int a=Calculator.add(new List<int>() { 10, 20, 30, 67, 78 });
            Console.WriteLine(a);
            Console.ReadKey();
        }
    }
public class Calculator
{
    [Obsolete]
    public static int add(int firstNumber,int SecondNumber)
    {
        return firstNumber+SecondNumber;
    }
    public static int add(List<int>Number)
    {
        int sum = 0;
        for(int i=0;i<Number.Count;i++)
        {
            sum = sum + Number[i];
        }
        return sum;
    }
}

ধরো আমরা দুটি নাম্বার , এর যোগফল বের করার জন্য , একটা Calculator ক্লাসের ভেতরে , একটা মেথোড ক্রিয়েট করেছি ।। কিন্তু , সমস্যা হচ্ছে -- যদি অনেকগুলো নাম্বার এর যোগফল বের করতে হয় , তখন তো এই দুইটি নাম্বার এর যোগফল বের করার মেথোড কোনো কাজেই দেবে না , তাই না ?? তাই আমরা একই নামে - আরো একটি মেথোড ক্রিয়েট করেছি , বাট এবার লিস্ট ব্যবহার করেছি ।। তো যাই হোক , আমরা চাচ্ছি যে --- ইউজার যেনো দুই মেথোডই ব্যবহার করতে পারে । কিন্তু , প্রথম মেথোড ইউজ করলে যেনো ওয়ার্নিং পায় , তো এই জন্য আমরা একটা Attribute ইউজ করেছি , সেটা হলো [Obsolete] , তবে তুমি [ObsoleteAttribute] হিসেবেও লিখতে পারো সমস্যা নেই  ।। তারপর , আমরা মেইন মেথোড-এ দুই মেথোডকেই কল করেছি ।। এবার , int b = Calculator.add(10, 20); এর উপরে মাউস নিয়ে এসো , কি লিখা ওঠে ?? তোমায় কি ওয়ারনিং দেয় ??
আশা করি , বুঝতে পেরেছো যে - এটা কিন্তু আমাদের [Obsolete] অ্যাট্রিবিউট এর জন্যই দিয়ে থাকে , এই ওয়ারনিং ।। এবার আমরা এই   Attribute কে আরো কিছুটা  কাস্টোমাইজ করতে পারি ।। চলো দেখি কিভাবে ??

[Obsolete("Please Don't Use This , Use List<int>Number ")] , এখন Attribute এর  ভেতরে  এই কথাটি লিখেই মাউস টা এখন আবার int b = Calculator.add(10, 20); এর উপর মাউস টা রেখেই দেখো না ?? কি হয় ??
আশা করি , বুঝতে পেরেছো ।।   একটা কথা মনে রাখবো , আমাদের এই Obsolete কিন্তু একটা ক্লাস , যেটা Attribute নামক ক্লাস থেকে ইনহেরিটেড হয়েছে ।।

আচ্ছা , এখন তুমি যদি চাও যে -- কেউ যদি প্রথম মেথোডটি ইউজ করে তাহুলে যেনো , এরর দেখায় - কম্পাইল না হয়।। তাহলে চলো দেখি , কি হয় ???

[Obsolete("Please Don't Use This , Use List<int>Number ",true)], অর্থাৎ তুমি  Obsolete ক্লাসের কন্সট্রাক্টর-এ বুলিয়ান হিসেবেও প্যারামিটার পাস করাতে পারো , true ইউজ করার ফলে - এটা তোমাকে ওয়ারনিং এর বদলে এখন সরাসরি এরর দেখাবে, কম্পাইল হবে না  ।। আর যদি তুমি , false ইউজ করো তাহলে আগের মতোই শুধু ওয়ারনিং দেখাবে - আর কিছু নয় ।।

যাই হোক , আরো কিছু  Attribute নিয়ে আমরা পরে আলোচনা করবো ।। তাহলে আমরা , কম্পাইলার এরর ও ওয়ার্নিং কেও কাস্টোমাইজ করতে পারবো , তাই না ?? শুধু Attribute ইউজ করে   !!

আপাতত এইটুকুই ------------------------








No comments:

Post a Comment