কেন আমি "ভার" নামে একটি শ্রেণি তৈরি করতে পারি?


103

varসি # তে কিওয়ার্ড নয় ? তবে আমি কেন এটি করতে পারি:

public class var { }

public class main
{
    public static void main(string[] args)
    {
        var testVar = new var();
    }
}

কোডটিতে varযেটি ব্যবহৃত হয় তা হ'ল varক্লাসের আগে ঘোষিত mainক্লাস। এবং সংকলক এমনকি অভিযোগও করে না।

যখন আমি এটি করি:

public class int { }

অথবা এটা:

public class true { }

সংকলকটি বলেছিল intবা trueএকটি মূলশব্দ এবং এটির মতো ব্যবহার করা যায় না। কেন এটি এক সাথে হয় না var?


6
তুমি কেন চাইবে? তাই বিভ্রান্তিকর এবং পড়া কঠিন।
— ডুফাইমো

6
এটি পড়ুন: ব্লগস.এমএসএনএন
— বি

31
ভাল প্রশ্ন!
— রিচার্ড

50
আপনি var var = "var";একটি পদ্ধতিতেও করতে পারেন । সর্বোপরি শুক্রবার
— হেনক হলটারম্যান

11
আমি অনুমান করছি যে তারা "var" এর অর্থ বিশেষ কিছু বোঝার আগে কোড তৈরির সাথে পশ্চাদপটে সামঞ্জস্যপূর্ণ হওয়ার জন্য তারা এইভাবে তৈরি করেছিল ।
— vidtige

উত্তর:


101

varএই তালিকা অনুসারে কোনও কীওয়ার্ড নয় ।

এটি একটি প্রাসঙ্গিক কীওয়ার্ড, সুতরাং প্রসঙ্গ থেকে সংকলক সিদ্ধান্ত নিতে সক্ষম হয় যে আপনার শ্রেণিটি কোন এবং প্রসঙ্গগত কীওয়ার্ড এবং কোন বিভ্রান্তি দেখা দেয় না।

একটি প্রাসঙ্গিক কীওয়ার্ডটি হ'ল:

কোডে একটি নির্দিষ্ট অর্থ সরবরাহ করতে ব্যবহৃত হয়, তবে এটি সি # তে কোনও সংরক্ষিত শব্দ নয়।

যাতে এটি সংরক্ষিত না থাকে আপনি এটি ব্যবহার করতে পারেন।

উপরের মন্তব্যে যেমন উল্লেখ করা হয়েছে সেখানে পার্থক্য নিয়ে আলোচনা হয়েছে পাশাপাশি এরিক লিপার্টস ব্লগে সি # এর প্রতিটি সংস্করণে যুক্ত হওয়া বিভিন্ন কীওয়ার্ড এবং প্রাসঙ্গিক কীওয়ার্ডের তালিকা রয়েছে

এটি লক্ষণীয় যে আকর্ষণীয় যে কীওয়ার্ডগুলির সেটটি সি # 1.0 এ সিদ্ধান্ত নেওয়ার পরে সেখানে কোনও সংযোজন হয়নি, যাতে পিছনের সামঞ্জস্যতা সংরক্ষণ করা যায়।


1
তবে এটি এখানে "সি # কীওয়ার্ডস" এর অধীনে শ্রেণিবদ্ধ করা হয়েছে এমএসডিএন.মাইক্রোসফট.ইন- ইউএস / লাইব্রেরি / বিবি 383973.aspx ... বিভ্রান্তিকর!
— রিচার্ড

4
তবে এটি একটি Contextual Keyword। "কোডের একটি নির্দিষ্ট অর্থ প্রদানের জন্য একটি প্রাসঙ্গিক কীওয়ার্ড ব্যবহৃত হয়, তবে এটি সি # তে কোনও সংরক্ষিত শব্দ নয় Some কিছু প্রাসঙ্গিক কীওয়ার্ড যেমন আংশিক এবং যেখানে দুটি বা ততোধিক প্রসঙ্গে বিশেষ অর্থ রয়েছে" "
— টিম শেমলেটার

5
@ টিমশ্মেলটার তারপরে "ভার" হ'ল একটি "কীওয়ার্ড"। ঠিক একটি "সংরক্ষিত শব্দ" নয়, তাই না?
— লুস্কুবাল

2
আমি অনুমান করছি এটি পুরানো কোডের সাথে সামঞ্জস্য বজায় রাখার জন্য - যদি কারও নামের একটি শ্রেণি থাকে varতবে সি # আপগ্রেড করার সময় সবকিছু ভেঙে যায় না।
— কলম রজার্স

1
@ কলম আরোগার্স: ঠিক এই কারণেই সি # টিম এটি করেছে। পরে প্রবর্তিত অন্যান্য "কীওয়ার্ডগুলি" এর মতো, যোগ দিন ইত্যাদি (উপায় দ্বারা সমস্ত প্রাসঙ্গিক)।
— আবেল

18

সংকলকটি যথেষ্ট স্মার্ট যে আপনি যে প্রসঙ্গটি varশ্রেণীর নাম হিসাবে ব্যবহার করছেন সেটি কখনই কীওয়ার্ডের প্রসঙ্গ নয় তাই এটির অনুমতি দেয় (এজন্য এটি প্রাসঙ্গিক কীওয়ার্ড হিসাবে সংজ্ঞায়িত করা হয় )।


আমি মনে করি এই উত্তরটি অন্তত কিছুটা বিভ্রান্তিকর। সংকলকটি ঠিক " varকোডের মতো যথেষ্ট কোড" হিসাবে কীওয়ার্ড হিসাবে ব্যবহৃত হচ্ছে কিনা তা নির্ধারণ করতে "যথেষ্ট স্মার্ট" নয় var testVar = new var();। হ্যাঁ, প্রাসঙ্গিকভাবে, কোনও কাস্টম প্রকারের নাম varসংজ্ঞায়িত করা হয়েছে কিনা সেটির পরিপ্রেক্ষিতে এটি এতে অভিনয় করে তবে এটি স্পষ্টতই কারণ সংকলকটি সেই ক্ষেত্রে ক্লাসের কাছে বা ডিফল্ট মূলশব্দটি বোঝায় কিনা তা জানার ক্ষেত্রে যথেষ্ট স্মার্ট নয় because যেমন একটি প্রসঙ্গে। ছিল শব্দ ভিন্নভাবে নামে, এটা খুবই একই "প্রসঙ্গ" এ ব্যবহার করা যেতে পারে। var testVarvarvarvar
— বা ম্যাপার

অন্যান্য প্রাসঙ্গিক কীওয়ার্ডগুলির সাথে এর বিপরীতে যেহেতু add- এখানে, সংকলক প্রকৃতপক্ষে প্রতিটি ঘটনায় জানে কীওয়ার্ডটি বোঝানো হয়েছে কিনা তা (ইভেন্ট ডিক্লেয়ারেশন; সনাক্তকারী সেখানে কোনও অর্থবোধ করতে পারে না), বা কোডটি কোনও সনাক্তকারীকে উল্লেখ করছে কিনা (টাইপ বা একটি ঘোষণার নাম, একটি পদ্ধতি বডির মধ্যে শনাক্তকারীর ব্যবহার; কীওয়ার্ডটি সেখানে কোনও অর্থবোধ করবে না)।
— অথবা ম্যাপার

12

এটিকে দেখার আরও একটি উপায়: মূলশব্দ হিসাবে "var" সি # এর প্রথম সংস্করণগুলিতে ছিল না ("int" এবং "সত্য" এর বিপরীতে), সুতরাং আপনি সম্ভবত কিছু কোড লিখে থাকতে পারেন যার ক্লাস ছিল "var"। এটি পুরোপুরি সূক্ষ্ম এবং আইনী ছিল। তারপরে পরে যখন "ভার" ভাষাতে যুক্ত করা হয়েছিল, ডিজাইনাররা এটিকে এতটা বিনয় করেছিলেন যে এটি কেবল নির্দিষ্ট প্রসঙ্গে একটি কীওয়ার্ড তৈরি করতে পারে, সুতরাং আপনার বিদ্যমান বর্ণ শ্রেণি এখনও কাজ করবে।

এটি ভাষা নকশার আসল চ্যালেঞ্জগুলির মধ্যে একটি - কীভাবে বিদ্যমান কোডগুলি ভঙ্গ না করে এবং নতুন বৈশিষ্ট্যগুলিকে ব্যবহারের জন্য জটিল করে তোলা যায় না add


8

সংস্করণ 3 এর পূর্বে সি # সংস্করণে, স্পষ্টভাবে টাইপ করা স্থানীয় ভেরিয়েবলগুলি এখনও সমর্থিত ছিল না, সুতরাং varএর কোনও বিশেষ অর্থ ছিল না এবং এটি নামক ভেরিয়েবল এবং শ্রেণি সংজ্ঞা দেওয়া সম্ভব ছিল var। কারণ উভয় ঘটনার আপনাদের উদাহরণ প্রোগ্রাম, বৈধ varমধ্যে mainবর্গ উল্লেখ var।

সি # 3 এবং পরবর্তী সংস্করণগুলি নীচের দিকে সামঞ্জস্যপূর্ণ, সুতরাং সংস্করণ 3 এর পূর্বে সি # তে লিখিত কোডগুলি এখনও নতুন সংকলকগুলির সাথে সংকলন করে।

intএবং trueসি # 1 সাল থেকে কীওয়ার্ড।


3

কীওয়ার্ডগুলি প্রাসঙ্গিকভাবে সংরক্ষণ করা যেতে পারে। উত্স কোডটি বিশ্লেষণ করা হলে পার্স গাছের অংশ হিসাবে সেই প্রসঙ্গটি প্রতিষ্ঠিত হয়। কীওয়ার্ডগুলির মূল্যায়ন সেই প্রসঙ্গেই ঘটে। সুতরাং, এই ক্ষেত্রে, var কোনও সংরক্ষিত প্রসঙ্গে নয় এবং আপনি যখন একটি অ্যাসাইনমেন্ট বিবৃতিতে এটি ব্যবহার করছেন তখন তার একই অর্থ হবে না। আমি বিশ্বাস করি যে এই নমনীয়তার একটি কারণ হ'ল ভ্যারিয়াল সি # 3 এ প্রবর্তিত হয়েছিল, সুতরাং এটি সর্বত্র সংরক্ষিত করা কিছু প্রোগ্রামের পিছনে সামঞ্জস্যতা ভেঙে যেতে পারে, অন্যদিকে পরিবর্তনশীল প্রকারের ঘোষণা হিসাবে এটি পূর্ববর্তী সংস্করণগুলিতে সংকলিত হত না, সুতরাং এর কোনও কারণ নেই বিচ্ছেদ।

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