সি# প্রোগ্রামের গঠন
C# এর প্রধান সাংগঠনিক ধারণাসমূহ হলো program, namespace, type, member এবং assembly। এক বা একাধিক সোর্স ফাইল নিয়ে C# প্রোগ্রাম গঠিত হয়। প্রোগ্রাম টাইপ ঘোষনা করে যা বিভিন্ন ধরণের মেম্বার ধারন করে এবং প্রোগ্রামকে namespace এর মধ্যে সংগঠিত করা যায়।
Class এবং interface হলো type এর উদাহরণ। Field, method, property এবং event হলো member এর উদাহরণ।
C# প্রোগ্রামকে কম্পাইল করা হলে এগুলো দৃশ্যমানভাবে assembly ফাইলের মধ্যে প্যাকেজিং হয়। অ্যাসেম্বলির ফাইল এক্সটেনশন সাধারণত .exe
বা .dll
হয় এবং এটি নির্ভর করে আপনার C# প্রোগ্রাম বাস্তবায়নের উপরে। অর্থাৎ এটি নির্ভর করে আপনার প্রোগ্রামটি কম্পাইল হওয়ার পরে এটি যথাক্রমে অ্যাপ্লিকেশন অথবা লাইব্রেরিতে পরিণত হবে কিনা তার উপরে।
Acme.Collections
নামের namespace এর মধ্যে Stack
নামের একটি class ঘোষণা করা হয়েছে।
using System;
namespace Acme.Collections
{
public class Stack
{
Entry top;
public void Push(object data)
{
top = new Entry(top, data);
}
public object Pop()
{
if (top == null)
{
throw new InvalidOperationException();
}
object result = top.data;
top = top.next;
return result;
}
class Entry
{
public Entry next;
public object data;
public Entry(Entry next, object data)
{
this.next = next;
this.data = data;
}
}
}
}
প্রোগ্রামের ব্যাখ্যাঃ
- উপরের প্রোগ্রামে
Stack
ক্লাসের সম্পূর্ণ যোগ্যতাসম্পন্ন নামটি হলঃAcme.Collections.Stack
। - লক্ষ্য করলে দেখবেন, এই ক্লাসের কিছু মেম্বার রয়েছে। যেমন- top নামের একটি ফিল্ড, Push এবং Pop নামের দুটি মেথড এবং Entry নামের একটি নেস্টেড ক্লাস।
- আবার Entry ক্লাস এর তিনটি মেম্বার রয়েছে। যথাঃ next নামের একটি ফিল্ড, data নামের অন্য একটি ফিল্ড এবং একটি Entry নামের একটি constructor মেথড।
মনেকরি, উপরের উদাহরণের সোর্স কোড acme.cs
ফাইলে সংরক্ষিত আছে। নিম্নের কমান্ড লাইনের মাধ্যমে প্রোগ্রামকে কম্পাইল করা হয়।
csc /t:library acme.cs
কোডের কোথাও Main
মেথড না থাকায় কোড কম্পাইল শেষে লাইব্রেরিতে পরিণত হয় এবং acme.dill
নামে assembly কোড উৎপাদন করে।
আসেম্বলির মধ্যে Intermediate Language (IL) instruction আকারে সম্পাদনযোগ্য কোড এবং মেটাডেটা(metadata) আকারে প্রতীকি তথ্য থাকে। Assembly এর অন্তর্গত IL code সম্পাদিত হওয়ার পূর্বে .NET Common Language Runtime এর Just-In-Time (JIT) compiler এর মাধ্যমে স্বয়ংক্রিয়ভাবে প্রসেসর-ভিত্তিক কোডে রুপান্তরিত হয়।
যেহেতু আসেম্বলি কোড এবং মেটাডেটা উভয়ের মিশ্রণে গঠিত বিভিন্ন কার্যাবলীর স্ব-বিবরনী ইউনিট, সুতরাং C# এ #include
ডিরেক্টিভ এবং হেডার ফাইলের প্রয়োজন হয় না। কোন প্রোগ্রামে আসেম্বলিকে রেফারেন্স হিসেবে উল্লেখ করলে প্রোগ্রাম কম্পাইল করার সময় আসেম্বলির অন্তর্ভুক্ত public type এবং member উক্ত C# প্রোগ্রামে স্বয়ংক্রিয়ভাবে যুক্ত হয়ে যায়।
উদাহরণস্বরূপঃ নিম্নের প্রোগ্রামটি acme.dll
আসেম্বলি থেকে Acme.Collections.Stack
ক্লাস ব্যবহার করে।
using System;
using Acme.Collections;
class Example
{
static void Main()
{
Stack s = new Stack();
s.Push(1);
s.Push(10);
s.Push(100);
Console.WriteLine(s.Pop());
Console.WriteLine(s.Pop());
Console.WriteLine(s.Pop());
}
}
এই প্রোগ্রামটি যদি example.cs
ফাইলে সংরক্ষণ করা হয় এবং example.cs
কে যখন কম্পাইল করা হবে তখন acme.dl অ্যাসেম্বলিকে নিম্নের ন্যায় কম্পাইলার এর /r অপশনের মাধ্যমে রেফার করা যাবে।
csc /r:acme.dll example.cs
এটি example.cs
নামে একটি সম্পাদনযোগ্য অ্যাসেম্বলি তৈরি করে যা রান করানো হলে নিম্নের আউটপুট উৎপন্ন হয়।
100 10 1
C# একটি প্রোগ্রামের টেক্সটকে বিভিন্ন সোর্স ফাইলের মধ্যে সংরক্ষনের সম্মতি দেয়। যখন একাধিক ফাইলের একটি C# প্রোগ্রাম কম্পাইল করানো হয়, তখন সবগুলো সোর্স ফাইল একত্রে প্রসেস হয় এবং সোর্স ফাইলগুলি স্বাধীনভাবে একে অপরের সাথে রেফারেন্স হিসেবে নিজেদেরকে যুক্ত করতে পারে।
এই প্রক্রিয়াটি এমনভাবে সম্পন্ন হয় যেন প্রক্রিয়াকরণ এর পূর্বে সবগুলো সোর্স ফাইল একটি বৃহৎ ফাইলের মধ্যে সংযুক্ত ছিল।