আজকে আমরা 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 ইউজ করে !!
আপাতত এইটুকুই ------------------------
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