সি # তে "ভার" এর অর্থ কী? [নকল]


উত্তর:


161

এর অর্থ হ'ল স্থানীয় যে ধরণের ঘোষিত হচ্ছে তা তার প্রথম কার্যভারের উপর ভিত্তি করে সংকলক দ্বারা অনুমান করা হবে:

// 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 মাত্র দুটি ব্যবহার রয়েছে:

  1. ভেরিয়েবলগুলি ঘোষণার জন্য এটির জন্য কম টাইপিং প্রয়োজন, বিশেষত যখন কোনও ভেরিয়েবলটিকে নেস্টেড জেনেরিক প্রকার হিসাবে ঘোষণা করার সময়।
  2. বেনামি ধরণের কোনও অবজেক্টের রেফারেন্স সংরক্ষণ করার সময় এটি অবশ্যই ব্যবহার করা উচিত, কারণ প্রকারের নামটি আগে থেকেই জানা যায় না: var foo = new { Bar = "bar" };

আপনি varস্থানীয়রা ছাড়া আর কোনও কিছুর ধরণ হিসাবে ব্যবহার করতে পারবেন না । সুতরাং আপনি varক্ষেত্র / সম্পত্তি / প্যারামিটার / রিটার্নের ধরণের ঘোষণার জন্য কীওয়ার্ডটি ব্যবহার করতে পারবেন না ।


@cdhowie যদি যখন বললেন, var foo = new Foo(), fooধরনের হতে পারে Fooবা তার সুপার শ্রেণীর কোন। কীভাবে এটি কোনও আইনী হতে পারে?
— জন স্ট্রুড

4
@ জাজাক এটি আইনী নয়, এবং এটি ঘটনাও নয়। var foo = new Foo();হিসাবে একই জিনিস Foo foo = new Foo();, যার মানে fooএকটি থাকতে পারে Fooরেফারেন্স, অথবা একটি বস্তু একটি রেফারেন্স কোনো Foo সাব ধরন, না একটি Foo সুপার প্রকার।
— cdowie

15

এর অর্থ ডেটা প্রকারটি প্রসঙ্গ থেকে উদ্ভূত (অন্তর্ভুক্ত)।

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();

তবে পাঠ্যতা যে ত্যাগ স্বীকার করা হয় সেই বিন্দুতে অতিরিক্ত ব্যবহার করা যেতে পারে।


9

"ভার" এর অর্থ কম্পাইলার ব্যবহারের ভিত্তিতে ভেরিয়েবলের সুস্পষ্ট প্রকার নির্ধারণ করবে। উদাহরণ স্বরূপ,

var myVar = new Connection();

আপনাকে সংযোগের ধরণের একটি ভেরিয়েবল দেয়।


7

এটি সূচনাতে কী বরাদ্দ করা হয়েছে তার ভিত্তিতে একটি প্রকার ঘোষণা করে।

একটি সহজ উদাহরণ কোড:

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করা ছাড়া আর কোনও উপায় নেই কারণ তারা যে ধরণের ধরণের ধারণ করে তার নাম নেই।


5

আপনি কি কখনও এই জাতীয় পরিবর্তনশীল লিখতে ঘৃণা করেছেন?

XmlSerializer xmlSerializer = new XmlSerialzer(typeof(int))

সুতরাং, সি # 3.0 দিয়ে শুরু করে, আপনি এটির সাথে প্রতিস্থাপন করতে পারেন

var xmlSerializer = new XmlSerialzer(typeof(int))

একটি বিজ্ঞপ্তি: সংকলনের সময় প্রকারটি সমাধান করা হয়, সুতরাং পারফরম্যান্সে কোনও সমস্যা নেই। তবে কমপাইলারটি বিল্ড স্টেপ চলাকালীন টাইপ সনাক্ত করতে সক্ষম হওয়া উচিত, যাতে কোডটি var xmlSerializer;মোটেও সংকলন করে না।


0
  • নাম হিসাবে প্রস্তাবিত, var কোনও ডেটা টাইপ ছাড়াই পরিবর্তনশীল।
  • কোনও পদ্ধতিতে কোন ধরণের ডেটা ফিরিয়ে দেওয়া হবে তা আপনি যদি না জানেন তবে এই জাতীয় কেসগুলি var ব্যবহারের জন্য ভাল।
  • var হ'ল ইম্পিলিকেটেড টাইপ যার অর্থ সিস্টেম নিজেই ডেটা টাইপকে সংজ্ঞায়িত করবে। সংকলক "=" অপারেটরের ডানদিকে মানের উপর নির্ভর করে এর ধরণটি নির্ধারণ করবে।
  • ইন্ট / স্ট্রিং ইত্যাদি হ'ল সুস্পষ্ট প্রকার যেমন এটি আপনাকে স্পষ্টভাবে সংজ্ঞায়িত করে।
  • Var কেবল স্থানীয় ভেরিয়েবল হিসাবে কোনও পদ্ধতিতে সংজ্ঞায়িত করা যায়
  • একক বিবৃতিতে একাধিক ওয়ার ঘোষণা করা এবং আরম্ভ করা যায় না। উদাহরণস্বরূপ, var i = 1, j = 2; অবৈধ.
int i = 100;// explicitly typed 
var j = 100; // implicitly typed

0

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 -লোকাল-ভেরিয়েবল # টি মন্তব্য >

মূলত, আপনি কেবল তখনই এটি ব্যবহার করতে পারেন যখন আপনি "ভার মাইভ্যালু =" এটি মান "এর মতো অন্তর্নিহিত মান সহ কোনও ভেরিয়েবল ঘোষণা করছেন; উদাহরণস্বরূপ" স্ট্রিং "বলার তুলনায় এটি কিছুটা সময় সাশ্রয় করে তবে আইএমএইচও খুব বেশি সময় দেয় না সংরক্ষণ করা হয়েছে এবং আপনার প্রকল্পের স্কেলিবিলিটিতে একটি সীমাবদ্ধতা রাখে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.