সি # তে কীওয়ার্ড কীভাবে varকাজ করে?
সি # তে কীওয়ার্ড কীভাবে varকাজ করে?
উত্তর:
এর অর্থ হ'ল স্থানীয় যে ধরণের ঘোষিত হচ্ছে তা তার প্রথম কার্যভারের উপর ভিত্তি করে সংকলক দ্বারা অনুমান করা হবে:
// This statement:
var foo = "bar";
// Is equivalent to this statement:
string foo = "bar";
উল্লেখযোগ্যভাবে, varগতিশীল ধরণের হতে একটি ভেরিয়েবল সংজ্ঞায়িত করে না। সুতরাং এটি আইনী নয়:
var foo = "bar";
foo = 1; // Compiler error, the foo variable holds strings, not ints
var মাত্র দুটি ব্যবহার রয়েছে:
var foo = new { Bar = "bar" };আপনি varস্থানীয়রা ছাড়া আর কোনও কিছুর ধরণ হিসাবে ব্যবহার করতে পারবেন না । সুতরাং আপনি varক্ষেত্র / সম্পত্তি / প্যারামিটার / রিটার্নের ধরণের ঘোষণার জন্য কীওয়ার্ডটি ব্যবহার করতে পারবেন না ।
var foo = new Foo();হিসাবে একই জিনিস Foo foo = new Foo();, যার মানে fooএকটি থাকতে পারে Fooরেফারেন্স, অথবা একটি বস্তু একটি রেফারেন্স কোনো Foo সাব ধরন, না একটি Foo সুপার প্রকার।
এর অর্থ ডেটা প্রকারটি প্রসঙ্গ থেকে উদ্ভূত (অন্তর্ভুক্ত)।
Http://msdn.microsoft.com/en-us/library/bb383973.aspx থেকে
ভিজ্যুয়াল সি # 3.0 থেকে শুরু করে, পদ্ধতি স্কোপে ঘোষিত ভেরিয়েবলগুলির একটি অন্তর্নিহিত ধরণের ভেরি থাকতে পারে। একটি স্পষ্টভাবে টাইপ করা স্থানীয় ভেরিয়েবল দৃ strongly়ভাবে টাইপ করা হয় ঠিক যেমন আপনি নিজেরাই টাইপ ঘোষণা করেছেন তবে সংকলকটি টাইপটি নির্ধারণ করে। আমার নিম্নলিখিত দুটি ঘোষণাপত্র কার্যত সমতুল্য:
var i = 10; // implicitly typed
int i = 10; //explicitly typed
var কীবোর্ড টাইপিং এবং ভিজ্যুয়াল গোলমাল দূর করার জন্য দরকারী, যেমন,
MyReallyReallyLongClassName x = new MyReallyReallyLongClassName();
হয়ে যায়
var x = new MyReallyReallyLongClassName();
তবে পাঠ্যতা যে ত্যাগ স্বীকার করা হয় সেই বিন্দুতে অতিরিক্ত ব্যবহার করা যেতে পারে।
"ভার" এর অর্থ কম্পাইলার ব্যবহারের ভিত্তিতে ভেরিয়েবলের সুস্পষ্ট প্রকার নির্ধারণ করবে। উদাহরণ স্বরূপ,
var myVar = new Connection();
আপনাকে সংযোগের ধরণের একটি ভেরিয়েবল দেয়।
এটি সূচনাতে কী বরাদ্দ করা হয়েছে তার ভিত্তিতে একটি প্রকার ঘোষণা করে।
একটি সহজ উদাহরণ কোড:
var i = 53;
53 প্রকারের পরীক্ষা করবে এবং মূলত এটিকে আবার লিখবে:
int i = 53;
মনে রাখবেন যে আমাদের থাকতে পারে:
long i = 53;
এটি var এর সাথে ঘটবে না। যদিও এটি সহ:
var i = 53l; // i is now a long
একইভাবে:
var i = null; // not allowed as type can't be inferred.
var j = (string) null; // allowed as the expression (string) null has both type and value.
জটিল ধরণের সাথে এটি একটি স্বল্প সুবিধা হতে পারে। বেনামে ধরণের সাথে এটি আরও গুরুত্বপূর্ণ:
var i = from x in SomeSource where x.Name.Length > 3 select new {x.ID, x.Name};
foreach(var j in i)
Console.WriteLine(j.ID.ToString() + ":" + j.Name);
এখানে সংজ্ঞায়িত করার iএবং jব্যবহার varকরা ছাড়া আর কোনও উপায় নেই কারণ তারা যে ধরণের ধরণের ধারণ করে তার নাম নেই।
আপনি কি কখনও এই জাতীয় পরিবর্তনশীল লিখতে ঘৃণা করেছেন?
XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))
সুতরাং, সি # 3.0 দিয়ে শুরু করে, আপনি এটির সাথে প্রতিস্থাপন করতে পারেন
var xmlSerializer = new XmlSerialzer(typeof(int))
একটি বিজ্ঞপ্তি: সংকলনের সময় প্রকারটি সমাধান করা হয়, সুতরাং পারফরম্যান্সে কোনও সমস্যা নেই। তবে কমপাইলারটি বিল্ড স্টেপ চলাকালীন টাইপ সনাক্ত করতে সক্ষম হওয়া উচিত, যাতে কোডটি var xmlSerializer;মোটেও সংকলন করে না।
int i = 100;// explicitly typed
var j = 100; // implicitly typed
var হল সি # এর একটি "প্রাসঙ্গিক কীওয়ার্ড" যার অর্থ আপনি কেবল পরিবর্তনশীলটি ব্যবহার করছেন একই শ্রেণীর প্রসঙ্গে ইঙ্গিতভাবে স্থানীয় ভেরিয়েবল হিসাবে এটি ব্যবহার করতে পারেন। আপনি যদি "মেইন" বা অন্য কোনও বহির্মুখী শ্রেণীর কাছ থেকে কল করেন এমন কোনও ক্লাসে বা উদাহরণস্বরূপ একটি ইন্টারফেসে এটি ব্যবহার করার চেষ্টা করেন তবে আপনি ত্রুটিটি পাবেন CS0825 < https://docs.microsoft.com/en-us/dotnet/ csharp / misc / cs0825 >
আপনি এখানে ডকুমেন্টেশনে কখন এটি ব্যবহার করতে পারবেন না এবং ব্যবহার করতে পারবেন না সে সম্পর্কে মন্তব্যগুলি দেখুন: < https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/imp Clearly- typed -লোকাল-ভেরিয়েবল # টি মন্তব্য >
মূলত, আপনি কেবল তখনই এটি ব্যবহার করতে পারেন যখন আপনি "ভার মাইভ্যালু =" এটি মান "এর মতো অন্তর্নিহিত মান সহ কোনও ভেরিয়েবল ঘোষণা করছেন; উদাহরণস্বরূপ" স্ট্রিং "বলার তুলনায় এটি কিছুটা সময় সাশ্রয় করে তবে আইএমএইচও খুব বেশি সময় দেয় না সংরক্ষণ করা হয়েছে এবং আপনার প্রকল্পের স্কেলিবিলিটিতে একটি সীমাবদ্ধতা রাখে।
var foo = new Foo(),fooধরনের হতে পারেFooবা তার সুপার শ্রেণীর কোন। কীভাবে এটি কোনও আইনী হতে পারে?