ব্যবহারকারী কোকোস কী-ওয়ার্ডের উল্লেখ করে সি # প্রশ্নের বিস্ময়কর লুক্কায়িত বৈশিষ্ট্যগুলির উত্তর দিয়েছেন using
। আপনি কি এ সম্পর্কে বিস্তারিত বলতে পারেন? এর ব্যবহার কী using
?
ব্যবহারকারী কোকোস কী-ওয়ার্ডের উল্লেখ করে সি # প্রশ্নের বিস্ময়কর লুক্কায়িত বৈশিষ্ট্যগুলির উত্তর দিয়েছেন using
। আপনি কি এ সম্পর্কে বিস্তারিত বলতে পারেন? এর ব্যবহার কী using
?
উত্তর:
using
বিবৃতিটির কারণ হ'ল সুযোগটি বাইরে যাওয়ার সাথে সাথে অবজেক্টটি নিষ্পত্তি করা হয়েছে তা নিশ্চিত করা এবং এটি ঘটেছে তা নিশ্চিত করার জন্য এর স্পষ্ট কোডের প্রয়োজন নেই।
মতই সি # (codeproject) এ 'ব্যবহার' বিবৃতি বোঝা এবং যে বস্তু IDisposable (Microsoft) বাস্তবায়ন ব্যবহার , সি # কম্পাইলার ধর্মান্তরিত
using (MyResource myRes = new MyResource())
{
myRes.DoSomething();
}
প্রতি
{ // Limits scope of myRes
MyResource myRes= new MyResource();
try
{
myRes.DoSomething();
}
finally
{
// Check for a null resource.
if (myRes != null)
// Call the object's Dispose method.
((IDisposable)myRes).Dispose();
}
}
সি # 8 একটি নতুন সিনট্যাক্স উপস্থাপন করেছে, যার নাম " ঘোষণা ব্যবহার করে ":
একটি ব্যবহারের ঘোষণাপত্রটি হ'ল মূলশব্দ ব্যবহারের পূর্বে একটি পরিবর্তনীয় ঘোষণা। এটি সংকলককে বলে যে ঘোষিত চলকটি ঘেরের সুযোগের শেষে নিষ্পত্তি করা উচিত।
সুতরাং উপরের সমতুল্য কোডটি হ'ল:
using var myRes = new MyResource();
myRes.DoSomething();
এবং নিয়ন্ত্রণ যখন এতে থাকা সুযোগটি ছেড়ে যায় (সাধারণত একটি পদ্ধতি, তবে এটি একটি কোড myRes
ব্লকও হতে পারে ), নিষ্পত্তি হবে।
using
নিশ্চিত করে নির্মিত হয় Dispose
একবার আপনি বস্তুর সঙ্গে মাধ্যমে করছি বলা হয়।
MyRessource
স্ট্রাক্ট হয় তখন কিছুটা আলাদা । স্পষ্টতই নালার জন্য কোনও পরীক্ষা নেই, তবে কোনও বক্সিংও নেই IDisposable
। একটি সীমাবদ্ধ ভার্চুয়াল কল নির্গত হয়।
using
তবে এর অভ্যন্তরে নির্মিত চলকটি কেবলমাত্র পঠনযোগ্য। using
বিবৃতি ব্যতীত স্থানীয় ভেরিয়েবলের জন্য এটি অর্জন করার কোনও উপায় নেই ।
যেহেতু প্রচুর লোক এখনও করছেন:
using (System.IO.StreamReader r = new System.IO.StreamReader(""))
using (System.IO.StreamReader r2 = new System.IO.StreamReader("")) {
//code
}
আমার ধারণা অনেক লোক এখনও জানে না যে আপনি এটি করতে পারেন:
using (System.IO.StreamReader r = new System.IO.StreamReader(""), r2 = new System.IO.StreamReader("")) {
//code
}
এই জাতীয় জিনিস:
using (var conn = new SqlConnection("connection string"))
{
conn.Open();
// Execute SQL statement here on the connection you created
}
এটি SqlConnection
স্পষ্টভাবে .Close()
ফাংশনটি কল করার প্রয়োজন ছাড়াই এটি বন্ধ হয়ে যাবে এবং একটি ব্যতিক্রম নিক্ষেপ করা হলেও এটি ঘটবে , try
/ catch
/ এর প্রয়োজন ছাড়াই finally
।
return
মাঝখানে থেকে থাকেন using
।
অর্থে, ব্যবহার করে
using (var foo = new Bar())
{
Baz();
}
আসলে চেষ্টা / শেষ অবরুদ্ধ করার জন্য শর্টহ্যান্ড। এটি কোডের সমতুল্য:
var foo = new Bar();
try
{
Baz();
}
finally
{
foo.Dispose();
}
আপনি অবশ্যই লক্ষ্য করবেন যে প্রথম স্নিপেটটি দ্বিতীয়টির চেয়ে অনেকগুলি সংক্ষিপ্ত এবং এটিও রয়েছে যে ব্যতিক্রম ছুঁড়ে দেওয়া হলেও আপনি অনেক ধরণের জিনিসগুলি ক্লিনআপ হিসাবে করতে চাইতে পারেন। এর কারণে, আমরা এমন একটি ক্লাস নিয়ে এসেছি যা আমরা স্কোপ বলি যা আপনাকে ডিসপোজ পদ্ধতিতে স্বেচ্ছাসেবক কোড সম্পাদন করতে দেয়। সুতরাং, উদাহরণস্বরূপ, যদি আপনার কাছে ইসওয়ার্কিং নামে একটি সম্পত্তি থাকে যা আপনি সর্বদা কোনও অপারেশন করার চেষ্টা করার পরে মিথ্যাতে সেট করতে চেয়েছিলেন তবে আপনি এটি এটি করতে চাই:
using (new Scope(() => IsWorking = false))
{
IsWorking = true;
MundaneYetDangerousWork();
}
আমাদের সমাধান এবং আমরা কীভাবে এটি এখানে পেয়েছি সে সম্পর্কে আপনি আরও পড়তে পারেন ।
মাইক্রোসফ্ট ডকুমেন্টেশন বলছে যে ব্যবহারের একটি ডাবল ফাংশন রয়েছে ( https: //msdn.mic Microsoft.com/en-us/library/zhdeatwt.aspx ), উভয়ই নির্দেশিকা হিসাবে এবং বিবৃতি হিসাবে । একটি বিবৃতি হিসাবে, যেমন এটি এখানে অন্যান্য উত্তরে নির্দেশ করা হয়েছিল, মূল শব্দটি মূলত সিনড্যাকটিক চিনি একটি আইডিস্পোজেবল অবজেক্টের নিষ্পত্তি করার সুযোগ নির্ধারণ করার জন্য । একটি নির্দেশিকা হিসাবে , এটি নিয়মিতভাবে নেমস্পেস এবং প্রকারগুলি আমদানি করতে ব্যবহৃত হয়। এছাড়াও একটি নির্দেশ হিসাবে, আপনি তৈরি করতে পারেন alias লেখা নামব্যবধান এবং ধরনের জন্য, গ্রন্থে সরু আউট হিসাবে "সি # 5.0 সংক্ষেপে: নির্দিষ্ট নির্দেশিকা" ( http://www.amazon.com/5-0-Nutshell-The- নির্দিষ্ট-রেফারেন্স-ইসলাম / ডিপি / B008E6I1K8), জোসেফ এবং বেন আলবাহারি দ্বারা। একটি উদাহরণ:
namespace HelloWorld
{
using AppFunc = Func<IDictionary<DateTime, string>, List<string>>;
public class Startup
{
public static AppFunc OrderEvents()
{
AppFunc appFunc = (IDictionary<DateTime, string> events) =>
{
if ((events != null) && (events.Count > 0))
{
List<string> result = events.OrderBy(ev => ev.Key)
.Select(ev => ev.Value)
.ToList();
return result;
}
throw new ArgumentException("Event dictionary is null or empty.");
};
return appFunc;
}
}
}
এটি বিজ্ঞতার সাথে গ্রহণ করার মতো বিষয়, যেহেতু এই অনুশীলনের অপব্যবহার কারও কোডের স্পষ্টতাকে আঘাত করতে পারে। ডটনেটপলসগুলিতে ( http://www.dotnetperls.com/used-alias ) সি # এলিয়াসগুলির পক্ষে একটি ভাল ব্যাখ্যা রয়েছে, ভাল এবং বিপরীতে উল্লেখ রয়েছে ।
using
। কোডটি পড়ার সময় এটি আমাকে বিভ্রান্ত করে - আমি ইতিমধ্যে জানি যে এটি System.Collections
বিদ্যমান এবং IEnumerable<T>
ক্লাস রয়েছে। একে অন্যরকম কিছু বলার জন্য একটি উপাধি ব্যবহার করা আমার পক্ষে তা বিস্মৃত হয়। আমি using FooCollection = IEnumerable<Foo>
পরে বিকাশকারীদের কোডটি পড়ার একটি উপায় হিসাবে দেখি এবং মনে করি, "কী হ'ল FooCollection
এবং কেন কোথাও এটির জন্য কোনও শ্রেণি নেই?" আমি কখনই এটি ব্যবহার করি না এবং এটির ব্যবহারকে নিরুৎসাহিত করব। কিন্তু যে শুধু আমার হতে পারে।
ইনপুট এবং আউটপুট স্ট্রিমগুলির সাথে কাজ করতে আমি অতীতে এটি প্রচুর ব্যবহার করেছি। আপনি এগুলিকে সুন্দরভাবে বাসাতে পারেন এবং এটি সাধারণত আপনার যে সম্ভাব্য সমস্যার মধ্যে চলে আসে (স্বয়ংক্রিয়ভাবে নিষ্পত্তি কল করে) away উদাহরণ স্বরূপ:
using (FileStream fs = new FileStream("c:\file.txt", FileMode.Open))
{
using (BufferedStream bs = new BufferedStream(fs))
{
using (System.IO.StreamReader sr = new StreamReader(bs))
{
string output = sr.ReadToEnd();
}
}
}
আমি কিছুটা যুক্ত করে যা অবাক করেছিলাম তা উঠে আসে নি। (আমার মতে) ব্যবহারের সবচেয়ে আকর্ষণীয় বৈশিষ্ট্যটি হ'ল আপনি কীভাবে ব্লকটি ব্যবহার করে প্রস্থান করবেন তা কোনও ম্যাটারই নয়, এটি সর্বদা অবজেক্টটিকে নিষ্পত্তি করবে। এর মধ্যে রিটার্ন এবং ব্যতিক্রম অন্তর্ভুক্ত রয়েছে।
using (var db = new DbContext())
{
if(db.State == State.Closed) throw new Exception("Database connection is closed.");
return db.Something.ToList();
}
ব্যতিক্রম নিক্ষেপ করা হয় বা তালিকাটি ফিরে আসে তা বিবেচ্য নয়। DbContext অবজেক্টটি সর্বদা নিষ্পত্তি হবে।
কোনও মডেল ডায়ালগ ইনস্ট্যান্ট করার সময় ব্যবহারের আর একটি দুর্দান্ত ব্যবহার।
Using frm as new Form1
Form1.ShowDialog
' do stuff here
End Using
পরিশেষে, যখন আপনি একটি ধরনের একটি স্থানীয় ভেরিয়েবল ব্যবহার করে কার্যকরী IDisposable
, সবসময় , ব্যতিক্রম ছাড়া, ব্যবহার using
1 ।
আপনি যদি ননলোকাল IDisposable
ভেরিয়েবল ব্যবহার করেন তবে সর্বদা প্যাটার্নটি প্রয়োগ করুনIDisposable
।
দুটি সহজ নিয়ম, ব্যতিক্রম নয় 1 । অন্যথায় রিসোর্স ফাঁস রোধ করা * এস এস এর আসল ব্যথা।
1) : একমাত্র ব্যতিক্রম - আপনি যখন ব্যতিক্রমগুলি পরিচালনা করছেন। ব্লকের Dispose
মধ্যে স্পষ্টভাবে কল করা কোডের চেয়ে কম কোড হতে পারে finally
।
আপনি নিম্নলিখিত উদাহরণটি দিয়ে উপনাম নামস্থানটি ব্যবহার করতে পারেন:
using LegacyEntities = CompanyFoo.CoreLib.x86.VBComponents.CompanyObjects;
এটিকে একটি উপনাম নির্দেশিকা বলা হয় যেমন আপনি দেখতে পাচ্ছেন, এটি দীর্ঘ-বায়ুযুক্ত রেফারেন্সগুলি গোপন করতে ব্যবহার করা যেতে পারে আপনি যদি আপনার কোডটিতে উল্লেখ করছেন যা আপনার কোডটিতে এটি স্পষ্ট করে দেখাতে চান
LegacyEntities.Account
পরিবর্তে
CompanyFoo.CoreLib.x86.VBComponents.CompanyObjects.Account
বা সহজভাবে
Account // It is not obvious this is a legacy entity
মজার বিষয় হল, আপনি অন্যান্য আকর্ষণীয় জিনিসগুলির জন্য / আইডিস্পোজেবল প্যাটার্নটিও ব্যবহার করতে পারেন (যেমন রাইনো মকস যেভাবে এটি ব্যবহার করে তার অন্যান্য পয়েন্ট)। মূলত, আপনি যে সংকলকটি সর্বদা থাকবে তার সুবিধা নিতে পারেন সংকলকটি কল সেটির "" ব্যবহৃত "অবজেক্টটির বিষয়ে আলোচনা করুন। যদি আপনার কিছু নির্দিষ্ট ক্রিয়াকলাপ হওয়ার পরে ঘটে থাকে ... একটি নির্দিষ্ট শুরু এবং শেষ আছে এমন কিছু ... তবে আপনি কেবল একটি আইডিসপোজেবল বর্গ তৈরি করতে পারেন যা নির্মাতার মধ্যে ক্রিয়াকলাপ শুরু করে, এবং পরে ডিসপোজ পদ্ধতিতে শেষ করে।
এটি আপনাকে বলা অপারেশনের সুস্পষ্ট শুরু এবং শেষ বোঝাতে সিনট্যাক্স ব্যবহার করে সত্যই দুর্দান্ত ব্যবহার করতে দেয়। এটিও সিস্টেম T ট্রানজেকশনের স্টাফগুলি কীভাবে কাজ করে।
ADO.NET ব্যবহার করার সময় আপনি আপনার সংযোগ অবজেক্ট বা রিডার অবজেক্টের মতো জিনিসগুলির জন্য কীওয়ার্কটি ব্যবহার করতে পারেন। কোড ব্লকটি সম্পূর্ণ হয়ে গেলে এটি স্বয়ংক্রিয়ভাবে আপনার সংযোগটি নিষ্পত্তি করে দেবে।
"স্পেসিফিকেশন" ব্যবহার করে নামের স্থান বিরোধগুলি সমাধান করতেও ব্যবহার করা যেতে পারে। আমি এই বিষয়টিতে লিখেছিলাম এমন একটি সংক্ষিপ্ত টিউটোরিয়ালের জন্য http://www.davidarno.org/c-howtos/aliases-over आगामी- name- conflicts / দেখুন ।
public class ClassA:IDisposable
{
#region IDisposable Members
public void Dispose()
{
GC.SuppressFinalize(this);
}
#endregion
}
public void fn_Data()
{
using (ClassA ObjectName = new ClassA())
{
//use objectName
}
}
আপনি যখন এমন কোনও রিসোর্স ব্যবহার করবেন যা ব্যবহারের পরে তা নিষ্পত্তি করতে চান তখন ব্যবহার করা হয়।
উদাহরণস্বরূপ, যদি আপনি কোনও ফাইল সংস্থান বরাদ্দ করেন এবং কেবল কিছু পড়ার জন্য বা লেখার জন্য কোডের একটি বিভাগে এটি ব্যবহার করার প্রয়োজন হয় তবে আপনার ফাইলটি সম্পন্ন হওয়ার সাথে সাথে ফাইল সংস্থান নিষ্পত্তি করার জন্য সহায়ক।
ব্যবহৃত সংস্থানটি সঠিকভাবে কাজ করার জন্য আইডিস্পসোবল কার্যকর করতে হবে।
উদাহরণ:
using (File file = new File (parameters))
{
*code to do stuff with the file*
}
ব্যবহারের কীওয়ার্ডটি অবজেক্টের জন্য স্কোপটি সংজ্ঞায়িত করে এবং স্কোপটি সম্পূর্ণ হয়ে গেলে বস্তুর নিষ্পত্তি করে। উদাহরণ স্বরূপ.
using (Font font2 = new Font("Arial", 10.0f))
{
// use font2
}
কীওয়ার্ড ব্যবহার করে সি # তে এমএসডিএন নিবন্ধের জন্য এখানে দেখুন ।
এটি অতি গুরুত্বপূর্ণ যে নয়, তবে ফ্লাইয়ের সংস্থানগুলি পরিবর্তনের জন্যও ব্যবহার করা যেতে পারে। হ্যাঁ পূর্বে উল্লিখিত হিসাবে নিষ্পত্তিযোগ্য, তবে সম্ভবত বিশেষভাবে আপনি অন্য বাক্যগুলির কার্যকরকরণের সময় যে সংস্থানগুলি অন্য সংস্থানগুলির সাথে মেলে না সেগুলি চান না। সুতরাং আপনি এটি নিষ্পত্তি করতে চান যাতে এটি অন্য কোথাও হস্তক্ষেপ না করে।
নীচের মন্তব্যে ধন্যবাদ, আমি এই পোস্টটি কিছুটা সাফ করব (ক্ষমা প্রার্থনা করার সময় আমার 'আবর্জনা সংগ্রহ' শব্দটি ব্যবহার করা উচিত ছিল না):
আপনি যখন ব্যবহার ব্যবহার করবেন তখন এটি বস্তুর উপর ডিসপোজ () পদ্ধতি কল করবে ব্যবহারের সুযোগ শেষে। সুতরাং আপনার নিষ্পত্তি () পদ্ধতিতে আপনার দুর্দান্ত কিছু ক্লিনআপ কোড থাকতে পারে।
এখানে একটি বুলেট পয়েন্ট যা আশাবাদী এই অচিহ্নিত ডাউনটি পেতে পারে: আপনি যদি আইডিস্পোজেবল বাস্তবায়ন করেন তবে আপনার নিষ্পত্তি () বাস্তবায়নে আপনি জিসি.সপ্রেসফাইনালাইজ () কে কল করেছেন তা নিশ্চিত করুন, অন্যথায় স্বয়ংক্রিয় আবর্জনা সংগ্রহের চেষ্টা করার চেষ্টা করা হবে এবং এটি কিছুটা চূড়ান্ত করতে হবে বিন্দু, যা ইতিমধ্যে এটির () ডি ডিসপোজ করে রাখলে সর্বনিম্ন সম্পদের অপচয় হবে।
যুক্তিসঙ্গত ব্যবহারের আরেকটি উদাহরণ যেখানে অবিলম্বে অবজেক্টটি নিষ্পত্তি করা হয়:
using (IDataReader myReader = DataFunctions.ExecuteReader(CommandType.Text, sql.ToString(), dp.Parameters, myConnectionString))
{
while (myReader.Read())
{
MyObject theObject = new MyObject();
theObject.PublicProperty = myReader.GetString(0);
myCollection.Add(theObject);
}
}
কোঁকড়ানো বন্ধনীগুলির বাইরের সমস্ত কিছুই নিষ্পত্তি করা হয়, সুতরাং আপনি যদি অবজেক্টগুলি ব্যবহার না করেন তবে তা নিষ্পত্তি করা দুর্দান্ত it এটি এমন কারণ কারণ আপনার যদি স্কলডেটা অ্যাডাপ্টার অবজেক্ট থাকে এবং আপনি অ্যাপ্লিকেশন লাইফ চক্রটিতে কেবল একবার এটি ব্যবহার করছেন এবং আপনি কেবল একটি ডেটাसेट পূরণ করছেন এবং আপনার আর এটির প্রয়োজন নেই, আপনি কোডটি ব্যবহার করতে পারেন:
using(SqlDataAdapter adapter_object = new SqlDataAdapter(sql_command_parameter))
{
// do stuff
} // here adapter_object is disposed automatically
ব্যবহারের বিবৃতি আইডিসপোজেবল অবজেক্টগুলিকে সঠিকভাবে ব্যবহার করতে একটি সুবিধা ব্যবস্থা দেয়। একটি নিয়ম হিসাবে, আপনি যখন একটি আইডিজিপোজেবল অবজেক্ট ব্যবহার করেন, আপনি এটি ব্যবহারের বিবৃতিতে এটি ঘোষণা এবং তাত্ক্ষণিক করা উচিত। ইউজিং স্টেটমেন্টটি সঠিক উপায়ে অবজেক্টের পদ্ধতিটি ডিসপোজ পদ্ধতিকে কল করে এবং (যখন আপনি এটি পূর্ববর্তী চিত্র হিসাবে ব্যবহার করেন) ডিসপোজ বলা হওয়ার সাথে সাথে এটি বস্তুটি নিজেই সুযোগের বাইরে চলে যায়। ইউজিং ব্লকের মধ্যে, অবজেক্টটি কেবল পঠনযোগ্য এবং পরিবর্তিত বা পুনরায় নিয়োগ দেওয়া যাবে না।
এটি থেকে এসেছে: এখানে here
এটি উদাহরণস্বরূপ স্কোপগুলি তৈরি করতেও ব্যবহার করা যেতে পারে:
class LoggerScope:IDisposable {
static ThreadLocal<LoggerScope> threadScope =
new ThreadLocal<LoggerScope>();
private LoggerScope previous;
public static LoggerScope Current=> threadScope.Value;
public bool WithTime{get;}
public LoggerScope(bool withTime){
previous = threadScope.Value;
threadScope.Value = this;
WithTime=withTime;
}
public void Dispose(){
threadScope.Value = previous;
}
}
class Program {
public static void Main(params string[] args){
new Program().Run();
}
public void Run(){
log("something happend!");
using(new LoggerScope(false)){
log("the quick brown fox jumps over the lazy dog!");
using(new LoggerScope(true)){
log("nested scope!");
}
}
}
void log(string message){
if(LoggerScope.Current!=null){
Console.WriteLine(message);
if(LoggerScope.Current.WithTime){
Console.WriteLine(DateTime.Now);
}
}
}
}
ইউজিং স্টেটমেন্টটি .NET কে বলছে যে একবার ব্যবহার ব্লকটিতে নির্দিষ্ট করা অবজেক্টটি আর প্রয়োজন হবে না এটি ছেড়ে দিতে। সুতরাং আপনার ক্লাসগুলির জন্য 'ব্যবহার' ব্লক ব্যবহার করা উচিত যা তাদের পরে সিস্টেম.আইও প্রকারের মতো পরিষ্কার করা দরকার।
using
সি # তে কিওয়ার্ডের দুটি ব্যবহার নিম্নরূপ রয়েছে।
নির্দেশনা হিসাবে
সাধারণত আমরা using
কোড-পিছনে এবং শ্রেণি ফাইলগুলিতে নেমস্পেস যুক্ত করতে কীওয়ার্ডটি ব্যবহার করি । তারপরে এটি বর্তমান শ্রেণীর সমস্ত ক্লাস, ইন্টারফেস এবং বিমূর্ত ক্লাস এবং তাদের পদ্ধতি এবং বৈশিষ্ট্য উপলব্ধ করে।
উদাহরণ:
using System.IO;
বিবৃতি হিসাবে
এটি using
সি # তে কীওয়ার্ডটি ব্যবহারের অন্য উপায় । এটি আবর্জনা সংগ্রহের কার্যকারিতা উন্নয়নে গুরুত্বপূর্ণ ভূমিকা পালন করে।
using
বিবৃতি নিশ্চিত করে যে সৎকার () নামক একটি ব্যতিক্রম ঘটে এমনকি যদি আপনি বস্তুর তৈরি করছেন এবং কলিং পদ্ধতি, বৈশিষ্ট্য ইত্যাদি করা হয়। নিষ্পত্তি () হ'ল এমন একটি পদ্ধতি যা আইডিস্পোজযোগ্য ইন্টারফেসে উপস্থিত থাকে যা কাস্টম আবর্জনা সংগ্রহ বাস্তবায়নে সহায়তা করে। অন্য কথায় যদি আমি কিছু ডাটাবেস অপারেশন করছি (সন্নিবেশ করান, আপডেট করুন, মুছুন) তবে কোনওরকম ব্যতিক্রম ঘটে তবে এখানে ব্যবহারের বিবৃতিটি স্বয়ংক্রিয়ভাবে সংযোগটি বন্ধ করে দেয়। স্পষ্টভাবে সংযোগটি বন্ধ () পদ্ধতিতে কল করার দরকার নেই।
আর একটি গুরুত্বপূর্ণ বিষয় হ'ল এটি সংযোগ পুলিংয়ে সহায়তা করে। .NET- এ সংযোগ পুলিং একাধিকবার একটি ডাটাবেস সংযোগ বন্ধ করতে সহায়তা করে। এটি ভবিষ্যতে ব্যবহারের জন্য (পরের ডাটাবেস কল) জন্য একটি পুলে সংযোগ বস্তুকে প্রেরণ করে। পরের বার যখন আপনার অ্যাপ্লিকেশন থেকে একটি ডাটাবেস সংযোগ ডেকে আনা হবে তখন সংযোগের পুলটিতে উপলব্ধ অবজেক্টগুলি আনবে। সুতরাং এটি অ্যাপ্লিকেশনটির কার্যকারিতা উন্নত করতে সহায়তা করে। সুতরাং যখন আমরা ব্যবহারের বিবৃতিটি ব্যবহার করি তখন কন্ট্রোলারটি স্বয়ংক্রিয়ভাবে সংযোগ পুলে অবজেক্টটি প্রেরণ করে, ক্লোজ () এবং ডিসপোজ () পদ্ধতিগুলি স্পষ্টভাবে কল করার দরকার নেই।
আপনি চেষ্টা-ধরার ব্লকটি ব্যবহার করে স্টেটমেন্টটি যা করছেন তা একইভাবে করতে পারেন এবং অবশেষে ব্লকের ভিতরে ডিসপোজ () কে স্পষ্টভাবে কল করতে পারেন। তবে ব্যবহারের বিবৃতিটি কোডটিকে আরও পরিষ্কার এবং আরও মার্জিত করতে স্বয়ংক্রিয়ভাবে কলগুলি করে। ইউজিং ব্লকের মধ্যে, অবজেক্টটি কেবল পঠনযোগ্য এবং পরিবর্তিত বা পুনরায় নিয়োগ দেওয়া যাবে না।
উদাহরণ:
string connString = "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;";
using (SqlConnection conn = new SqlConnection(connString))
{
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "SELECT CustomerId, CompanyName FROM Customers";
conn.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
Console.WriteLine("{0}\t{1}", dr.GetString(0), dr.GetString(1));
}
}
পূর্ববর্তী কোডে আমি কোনও সংযোগ বন্ধ করছি না; এটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে। using
বিবৃতি কারণে স্বয়ংক্রিয়ভাবে conn.Close (কল হবে) using
বিবৃতি ( using (SqlConnection conn = new SqlConnection(connString)
) এবং একটি SqlDataReader বস্তুর জন্য একই। এবং যদি কোনও ব্যতিক্রম ঘটে তবে এটি সংযোগটি স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যাবে।
আরও তথ্যের জন্য দেখুন, সি # তে ব্যবহারের ব্যবহার এবং গুরুত্ব ।
গণ্ডার ঠাট্টা রেকর্ড-প্লেব্যাক সিনট্যাক্স এর একটি আকর্ষণীয় ব্যবহার করে using
।
একটি বিবৃতি হিসাবে ব্যবহার স্বয়ংক্রিয়ভাবে নির্দিষ্ট বস্তুর নিষ্পত্তি কল। অবজেক্টটি অবশ্যই আইডিস্পোজেবল ইন্টারফেস প্রয়োগ করতে পারে। এক বিবৃতিতে যতক্ষণ না তারা একই ধরণের হয় ততক্ষণ বেশ কয়েকটি অবজেক্ট ব্যবহার করা সম্ভব।
সিএলআর আপনার কোডটি এমএসআইএলে রূপান্তর করে। এবং ব্যবহারের বিবৃতিটি চেষ্টা করে অনুবাদ করা হয় এবং অবশেষে ব্লক হয়ে যায়। আইএল-তে এভাবে ব্যবহারের বিবৃতি উপস্থাপন করা হয়। একটি ব্যবহারের বিবৃতিটি তিন ভাগে অনুবাদ করা হয়: অধিগ্রহণ, ব্যবহার এবং নিষ্পত্তি। সংস্থানটি প্রথমে অধিগ্রহণ করা হয়, তারপরে ব্যবহারটি একটি শেষ বিবরণ দিয়ে একটি চেষ্টা বিবৃতিতে সংযুক্ত থাকে। এরপরে অবজেক্টটি শেষ অবধি নিষ্পত্তি হয়।
ক্লজ ব্যবহার করে নির্দিষ্ট ভেরিয়েবলের স্কোপ সংজ্ঞায়িত করতে ব্যবহৃত হয়। উদাহরণ স্বরূপ:
Using(SqlConnection conn=new SqlConnection(ConnectionString)
{
Conn.Open()
// Execute sql statements here.
// You do not have to close the connection explicitly here as "USING" will close the connection once the object Conn becomes out of the defined scope.
}