কেন সি # পঠনীয় স্থানীয় ভেরিয়েবলগুলি বারণ করে?


115

এ সম্পর্কে কোনও সহকর্মীর সাথে বন্ধুত্বপূর্ণ বিতর্ক করা। এ সম্পর্কে আমাদের কিছু চিন্তাভাবনা আছে তবে অবাক হয়ে যাচ্ছেন যে এসও জনতা এ সম্পর্কে কী ভাববে?


4
@ কলোনেলপ্যানিক সি এবং সি ++ এর কনস্ট লোকাল ভেরিয়েবল রয়েছে, যা আপনি রানটাইম-গণিত মান দিয়ে আরম্ভ করতে পারেন।
ক্র্যাশ ওয়ার্কস

1
জাভাস্ক্রিপ্ট 2015 (ES6) এর কনস্ট টাইপ রয়েছে। যেমন {কনস্ট মাইলিস্ট = [1,2,3]; }। এই কনস্ট্রাক্টটি ব্যবহার করার জন্য এটি খুব ভাল প্রোগ্রামিং অনুশীলন। আরও তথ্য: developer.mozilla.org/en-US/docs/Web/JavaScript/References/…
andrew.fox

1
আগ্রহীদের জন্য, এই বৈশিষ্ট্যটির জন্য একটি ব্যবহারকারীর পরামর্শ রয়েছে । এটি বর্তমানে কেবল ৮ 87 ভোটে বসে আছে, সুতরাং আপনি যদি স্থানীয় পঠনযোগ্য ভেরিয়েবলগুলি দেখতে চান তবে দয়া করে এটি টুকরো টুকরো করে যান!
ইয়ান কেম্প

1
এটি কেবল একটি ভাষার সমস্যা নয়। এটি সর্বোচ্চ রেট প্রাপ্ত সি # গুরু সহ সি # সম্প্রদায়ের সংখ্যাগরিষ্ঠের একটি সমস্যা, তারা দৃ const়তা এবং সঠিকভাবে সম্পর্কিত যে কোনও বিষয়কে যত্ন না করে। প্রতিরোধ বৃথা.
প্যাট্রিক ফোরবার্গ

1
আপডেট 2017 : দয়া করে সি # ল্যাঙ্গুয়েজ ডিজাইনের রেপোতে আলোচিত বৈশিষ্ট্যটির অনুরোধের জন্য ভোট দিন! github.com/dotnet/csharplang/issues/188
কর্নেল আতঙ্ক

উত্তর:


15

একটি কারণ হ'ল কেবল পঠনযোগ্য স্থানীয়দের জন্য কোনও সিএলআর সমর্থন নেই। পঠনযোগ্য সিএলআর / সিএলআই প্রাথমিকভাবে অপকোডে অনুবাদ করা হয়েছে। এই পতাকাটি কেবল ক্ষেত্রগুলিতে প্রয়োগ করা যেতে পারে এবং কোনও স্থানীয়দের কাছে এর কোনও অর্থ নেই। প্রকৃতপক্ষে, কোনও স্থানীয়কে এটি প্রয়োগ করা সম্ভবত অবিশ্বাস্য কোড তৈরি করবে।

এর অর্থ এই নয় যে সি # এটি করতে পারে না। তবে এটি একই ভাষা গঠনের জন্য দুটি পৃথক অর্থ দেবে। স্থানীয়দের জন্য সংস্করণে কোনও সিএলআর সমতুল্য ম্যাপিং থাকবে না।


57
বৈশিষ্ট্যের জন্য এটি সিএলআই সমর্থন করার সাথে আসলে কিছুই করার নেই, কারণ স্থানীয় ভেরিয়েবলগুলি কোনওভাবেই অন্যান্য সমাবেশগুলিতে প্রকাশিত হয় না। readonlyক্ষেত্রের জন্য শব্দ CLI দ্বারা সমর্থিত হবে কারণ তার প্রভাব দরকার হয় অন্যান্য সমাহারগুলি কাছে দৃশ্যমান। এর অর্থ কেবল এটিই হ'ল সংকলন সময়ে চলকটির কেবল পদ্ধতিতে একটি অ্যাসাইনমেন্ট থাকে।
স্যাম হারওয়েল

16
আমি মনে করি আপনি এই প্রশ্নটি কেবল সরিয়ে নিয়েছেন কেন সিএলআর এর পিছনে যুক্তি সরবরাহ করার চেয়ে এটি সমর্থন করে না। এটি কনস্টেবল স্থানীয়দের জন্য অনুমতি দেয়, সুতরাং কেবলমাত্র পঠিত স্থানীয়দেরও আশা করা যুক্তিসঙ্গত হবে।
চাদ শোগগিন্স

9
এর উদাহরণ হ'ল ইউজিং স্টেটমেন্টে ভেরিয়েবলের সংজ্ঞা দেওয়া হয়। তারা স্থানীয় ... এবং কেবলমাত্র পঠনযোগ্য (তাদের নির্ধারণের চেষ্টা করুন, সি # একটি ত্রুটি যুক্ত করবে)।
সফটলিয়ন

7
-1 সি ++ এর জন্য কোনও মেশিন কোড সমর্থন নেই const(যা সি ++ তে সি # এর readonlyচেয়ে সি # এর মতো const, যদিও এটি উভয় ভূমিকা পালন করতে পারে)। তবুও সি ++ constস্থানীয় স্বয়ংক্রিয় চলকটির জন্য সমর্থন করে । সুতরাং readonlyস্থানীয় ভেরিয়েবলের জন্য সি # র সিএলআর সমর্থনের অভাব অপ্রাসঙ্গিক।
চিয়ার্স এবং এইচটিএইচ - আলফ

5
1. এটি সহজেই সি ++ এর মতো একটি সংকলক বৈশিষ্ট্য হতে পারে। সিএলআর সমর্থন সম্পূর্ণ অপ্রাসঙ্গিক। মেশিন সমাবেশ এটি সমর্থন করে না, তাই কি? ২. (এটি) সম্ভবত যাচাইযোগ্য কোড তৈরি করবে - আমি কীভাবে দেখছি না তবে সম্ভবত আমার ভুল হয়েছে am ৩. এটি একই ভাষা গঠনের দুটি পৃথক অর্থ দেবে - আমার সন্দেহ হয় যে কেউ এটিকে একটি সমস্যা হিসাবে দেখবে, যেহেতু usingএবং outঠিক তা-ই করছে এবং বিশ্ব ভেঙে পড়েনি।
লু

66

আমি মনে করি এটি সি # আর্কিটেক্টের পক্ষে একটি দুর্বল রায়। স্থানীয় ভেরিয়েবলগুলিতে কেবলমাত্র পঠনযোগ্য সংশোধক প্রোগ্রামের যথার্থতা বজায় রাখতে সহায়তা করে (ঠিক যেমন দাবি করে) এবং সংকলকটিকে কমপিটেট অপ্টিমাইজ করতে সহায়তা করতে পারে (কমপক্ষে অন্যান্য ভাষার ক্ষেত্রে)। এটি এখনই সি # তে অনুমোদিত নয়, এটি অন্য যুক্তি যে সি # এর কিছু "বৈশিষ্ট্য" কেবল এটির নির্মাতাদের ব্যক্তিগত কোডিং শৈলীর প্রয়োগ।


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

1
@ কর্নেলিয়াস আমি সম্মত হই যে মতামত রয়েছে যে কিছু ক্ষেত্রে সংকলক ডেটা-ফ্লো ডায়াগ্রামটি কোনও কীওয়ার্ড / সংশোধনকারী নির্বিশেষে অনুকূলকরণের সুযোগটি খুঁজে বের করার জন্য ব্যবহার করে। তবে প্রোগ্রামারকে নিজের থেকে ভুল লিখতে বাঁচানো এবং অন্যথায় অযথা অযাচিত কোডগুলি সংকলকটির জন্য সেই অপ্টিমাইজেশনের সুযোগটি খুলতে পারে।
শুভা

আধুনিক সংকলকরা যাইহোক স্ট্যাটিক সিঙ্গল অ্যাসাইনমেন্টটি সম্পাদন করে না? যে ক্ষেত্রে এটি অপ্টিমাইজেশনের সাথে সম্পর্কিত তবে এটি সংশোধন করে (তবে যদি কোনও সংকলক এসএসএকে সমর্থন করে তবে এর অর্থ এটি স্থানীয় স্থানীয় ভেরিয়েবলগুলি একবার প্রয়োগ করাও ক্ষুদ্র)।
দাই

33

জ্যারেডের উত্তরে সম্বোধন করা, এটি সম্ভবত একটি সংকলন-সময় বৈশিষ্ট্য হতে হবে - সংকলক প্রাথমিক ঘোষণার পরে পরিবর্তনশীলটিতে আপনাকে লেখা লিখতে নিষেধ করবে (যার মধ্যে একটি অ্যাসাইনমেন্ট অন্তর্ভুক্ত থাকতে হবে)।

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

কি এটা মূল্য জন্য, জাভা এই বৈশিষ্ট্য (ব্যবহার হয়েছে finalপরিবর্তক) এবং আমি করেছি খুব কমই দেখা যায় এটা ক্ষেত্রে যেখানে এটা ছাড়া অন্য ব্যবহার হয়েছে পরিবর্তনশীল একটি বেনামী ভেতরের বর্গ ক্যাপচার করার অনুমতি ব্যবহার করা হবে - এবং যেখানে এটি হয় ব্যবহৃত, এটি আমাকে দরকারী তথ্যের চেয়ে বিশৃঙ্খলার ছাপ দেয়।


75
আপনার পদ্ধতিতে দৃষ্টিভঙ্গি দ্বারা এবং সংকলক দ্বারা পরিবর্তনশীল কিনা তা দেখার মধ্যে পার্থক্য রয়েছে । কোনও পদ্ধতি লিখতে আমি কোনও আপত্তি দেখছি না, ভেরিয়েবলটি সংশোধন না করার আমার উদ্দেশ্যটি উল্লেখ করে এবং যখন আমি দুর্ঘটনাক্রমে করি তখন সংকলকটি আমাকে অবহিত করে (সম্ভবত এক মাস পরে টাইপোর সাহায্যে)!
এ। রেক্স

50
অন্যদিকে, এফ # তে সমস্ত পরিবর্তনশীল কেবলমাত্র ডিফল্টরূপে পঠনযোগ্য এবং আপনি যদি তাদের পরিবর্তন করতে সক্ষম হতে চান তবে আপনাকে 'পরিবর্তনযোগ্য' কীওয়ার্ডটি ব্যবহার করতে হবে। যেহেতু এফ # একটি নেট নেটওয়ার্ক, তাই আমি ধারণা করি এটি আপনার বর্ণনা করা সংকলন-সময় পরীক্ষা করে।
জোয়েল মুয়েলার

2
@ এআরএক্স: প্রশ্নটি পড়ার সময় সংকলকটি পাওয়ার সুবিধাটি কোডড পড়ার সময় অতিরিক্ত "ফ্লাফ" এর পক্ষে মূল্যবান কিনা এবং প্রকৃতপক্ষে এটি যত্নশীল না করে কিনা তা সত্যিই প্রশ্ন।
জন স্কিটি

3
এফডাব্লুআইডাব্লু, স্কালা তার এবং কীওয়ার্ডগুলির সাহায্যে ভেরিয়েবল থেকে স্থানীয় readonly/ finalমানকে পৃথক করে । স্কালা কোডে, স্থানীয় sগুলি খুব ঘন ঘন ব্যবহৃত হয় (এবং বাস্তবে স্থানীয় এসগুলির চেয়ে পছন্দসই হয় )। আমি সন্দেহ করি যে জাভাতে সংশোধক বেশি ঘন ঘন ব্যবহার করা হয় না সেগুলি প্রাথমিক কারণগুলি হ) ক) নড়বড়ে এবং খ) অলসতা। valvarvalvarfinal
অ্যারন নভস্ট্রাপ

4
স্থানীয় ভেরিয়েবলগুলির জন্য যা ক্লোজারগুলিতে ব্যবহৃত হয় readonlyনা, এটি অত্যধিক গুরুত্বপূর্ণ হবে না। অন্যদিকে, স্থানীয় ভেরিয়েবলগুলির জন্য যা ক্লোজারে ব্যবহৃত হয়, readonlyঅনেক ক্ষেত্রে সংকলকটি আরও কার্যকর কোড তৈরি করতে দেয়। বর্তমানে, যখন এক্সিকিউশনটি কোনও ক্লোজারযুক্ত ব্লকে প্রবেশ করে, সংকলক অবশ্যই ক্লোজড-ওভার ভেরিয়েবলগুলির জন্য একটি নতুন হিপ অবজেক্ট তৈরি করতে হবে, এমনকি যদি কোনও কোড যা ক্লোজার ব্যবহার করে তা কার্যকর করা হয় না । যদি কোনও ভেরিয়েবল কেবল পঠনযোগ্য হয় তবে বন্ধের বাইরের কোডটি একটি সাধারণ ভেরিয়েবল ব্যবহার করতে পারে; বন্ধের জন্য যখন কোনও প্রতিনিধি তৈরি করা হয় কেবল তখনই ...
সুপারক্যাট

30

একটি প্রস্তাব কেবলমাত্র স্থানীয়দের এবং পরামিতি সি # 7 নকশা দল দ্বারা আলোচনা হয়েছিল সংক্ষিপ্তভাবে। থেকে জানুয়ারী 21, 2015 জন্য C # ডিজাইন সভা নোট :

প্যারামিটার এবং স্থানীয়দের ল্যাম্বডাস দ্বারা ক্যাপচার করা যায় এবং এর মাধ্যমে একই সাথে অ্যাক্সেস করা যায় তবে তাদের ভাগ করে নেওয়া-পারস্পরিক-রাষ্ট্রীয় সমস্যাগুলি থেকে রক্ষা করার কোনও উপায় নেই: সেগুলি কেবল পঠনযোগ্য নয়।

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

একটি সমস্যা হ'ল এই বৈশিষ্ট্যটি সম্ভবত "আকর্ষণীয় উপদ্রব" হতে পারে। যেখানে "সঠিক জিনিস "টি প্রায় সর্বদা পরামিতিগুলি এবং স্থানীয়দের কেবল পঠনযোগ্যভাবে তৈরি করা হত, তা করার জন্য কোডটি উল্লেখযোগ্যভাবে বিশৃঙ্খলা করবে।

আংশিকভাবে এটিকে হ্রাস করার একটি ধারণা হ'ল স্থানীয় ভেরিয়েবলের মধ্যে কেবল পঠনযোগ্য ভারে সংমিশ্রণটি ভাল বা এর মতো সংক্ষিপ্ত কিছুতে সংকোচনের অনুমতি দেওয়া। আরও সাধারণভাবে আমরা কেবলমাত্র পাঠ্য-নেসটি প্রকাশ করার জন্য প্রতিষ্ঠিত পাঠ্যপুস্তকের চেয়ে সংক্ষিপ্ত কীওয়ার্ডটি চিন্তা করার চেষ্টা করতে পারি।

সি # ল্যাঙ্গুয়েজ ডিজাইনের রেপোতে আলোচনা অব্যাহত রয়েছে। আপনার সমর্থন দেখানোর জন্য ভোট দিন। https://github.com/dotnet/csharplang/issues/188


কেবলমাত্র পঠনযোগ্য ডিফল্ট করতে পারে (কিছু বিকল্প বা কীওয়ার্ড বা যে কোনও মাধ্যমে)। সর্বাধিক ভেরিয়েবল এবং পরামিতি কেবলমাত্র কয়েকটি লিখিতযোগ্য দ্বারা পঠনযোগ্য হওয়া উচিত। এবং লিখিতযোগ্য সংখ্যাটি হ্রাস করা সাধারণত একটি ভাল জিনিস।
ডেভ কাজিনো

12

এটি সি # ভাষা ডিজাইনারের জন্য একটি তদারকি। এফ # এর ভাল কীওয়ার্ড রয়েছে এবং এটি সিএলআর ভিত্তিক। সি # তে একই ভাষার বৈশিষ্ট্য থাকতে পারে না এমন কোনও কারণ নেই।


7

আমি সেই সহকর্মী এবং এটি বন্ধুত্বপূর্ণ ছিল না! (শুধু মজা করছি)

আমি বৈশিষ্ট্যটি মুছে ফেলব না কারণ সংক্ষিপ্ত পদ্ধতিগুলি লেখাই ভাল। এটি কিছুটা বলার মতো যা আপনার থ্রেড ব্যবহার করা উচিত নয় কারণ তারা শক্ত। আমাকে ছুরি দিন এবং আমাকে নিজেকে কাটা না দেওয়ার জন্য দায়বদ্ধ করুন।

ব্যক্তিগতভাবে, আমি বিশৃঙ্খলা এড়াতে "ইনভ" (আগত) বা "রাভার" এর মতো আরও একটি "বার" টাইপ কীওয়ার্ড চাইছিলাম। আমি দেরী হিসাবে এফ # অধ্যয়ন করেছি এবং অপরিবর্তনীয় জিনিস খুঁজে পেলাম।

জাভা এটি কখনও জানত না।


5

আমি স্থানীয় চাই কেবলমাত্র একই পদ্ধতিতে ভেরিয়েবল যেমন আমি স্থানীয় পছন্দ const ভেরিয়েবল। তবে অন্যান্য বিষয়ের তুলনায় এর কম অগ্রাধিকার রয়েছে।
হয়তো এর অগ্রাধিকার হ'ল সি # ডিজাইনারদের এই বৈশিষ্ট্যটি বাস্তবায়ন না করার (এখনও!) একই কারণ । তবে ভবিষ্যতের সংস্করণগুলিতে স্থানীয় পঠনযোগ্য ভেরিয়েবলগুলি সমর্থন করা সহজ (এবং পিছনে সামঞ্জস্যপূর্ণ) হওয়া উচিত।


2

কেবলমাত্র পঠনযোগ্য অর্থ হল কনস্ট্রাক্টরটিতে ইনস্ট্যান্স ভেরিয়েবল সেট করা যায়। স্থানীয়ভাবে ভেরিয়েবল ঘোষণার সময় এর কোনও উদাহরণ নেই (এটি কেবল সুযোগে রয়েছে), এবং এটি নির্মাণকারীর দ্বারা স্পর্শ করা যায় না।


6
এটি সি # তে 'পঠনযোগ্য' এর বর্তমান অর্থ, তবে এটি প্রশ্ন নয়। 'কেবল পঠনযোগ্য' এর একটি ইংরেজি অর্থ রয়েছে যা স্থানীয় ভেরিয়েবলের কাছে স্বজ্ঞাত প্রয়োগ বলে মনে হয়: আপনি এটি লিখতে পারবেন না (এটি আরম্ভ করার পরে)। উদাহরণস্বরূপ ভেরিয়েবলগুলিতে প্রয়োগ করার সময় এটি অর্থটির মতো মনে হয়, সুতরাং কেন (ন্যায়বিচার হিসাবে, আমি মনে করি) আমরা স্থানীয় ভেরিয়েবলগুলিতে এটি প্রয়োগ করতে পারি না?
স্পাইকএক্সএফ

0

আমি জানি, এটি কেন আপনার প্রশ্নের উত্তর দেয় না। যাইহোক, যারা এই প্রশ্নটি পড়ছেন তারা তবুও নীচের কোডটির প্রশংসা করতে পারেন।

কোনও স্থানীয় পরিবর্তনশীল যা কেবল একবার সেট করা উচিত নয় এবং আপনি এটিকে আরও বিশ্বব্যাপী অ্যাক্সেসযোগ্য ভেরিয়েবল করতে চান না যদি আপনি সত্যই পায়ে নিজেকে গুলি করার বিষয়ে উদ্বিগ্ন হন তবে আপনি এরকম কিছু করতে পারেন।

    public class ReadOnly<T>
    {
        public T Value { get; private set; }

        public ReadOnly(T pValue)
        {
            Value = pValue;
        }

        public static bool operator ==(ReadOnly<T> pReadOnlyT, T pT)
        {
            if (object.ReferenceEquals(pReadOnlyT, null))
            {
                return object.ReferenceEquals(pT, null);
            }
            return (pReadOnlyT.Value.Equals(pT));
        }

        public static bool operator !=(ReadOnly<T> pReadOnlyT, T pT)
        {
            return !(pReadOnlyT == pT);
        }
    }

ব্যবহারের উদাহরণ:

        var rInt = new ReadOnly<int>(5);
        if (rInt == 5)
        {
            //Int is 5 indeed
        }
        var copyValueOfInt = rInt.Value;
        //rInt.Value = 6; //Doesn't compile, setter is private

সম্ভবত হিসাবে কম কোড না rvar rInt = 5কিন্তু এটি কাজ করে।


এটি এখানে সাহায্য করে না। ভেরিয়েবল 'ভার' সহ এই সমস্যাটি হ'ল: পাঁচ পাঁচ = পাঁচ পাঁচ = 6; Assert.That (পাঁচ == 5)}
মারে

0

আপনি যদি সি # ইন্টারেক্টিভ সংকলক ব্যবহার করেন তবে আপনি সি # তে পঠনীয় স্থানীয় ভেরিয়েবলগুলি ঘোষণা করতে পারেন csi:

>"C:\Program Files (x86)\MSBuild\14.0\Bin\csi.exe"
Microsoft (R) Visual C# Interactive Compiler version 1.3.1.60616
Copyright (C) Microsoft Corporation. All rights reserved.

Type "#help" for more information.
> readonly var message = "hello";
> message = "goodbye";
(1,1): error CS0191: A readonly field cannot be assigned to (except in a constructor or a variable initializer)

আপনি .csxস্ক্রিপ্ট ফর্ম্যাটে পঠনযোগ্য স্থানীয় ভেরিয়েবলগুলিও ঘোষণা করতে পারেন ।


5
ত্রুটি বার্তা প্রতি, messageএখানে একটি পরিবর্তনশীল নয়, এটি একটি ক্ষেত্রের মধ্যে সংকলিত হয়। এটি নিটপিকিং নয় কারণ পার্থক্যটি ইন্টারেক্টিভ সি # তেও স্পষ্টভাবে উপস্থিত রয়েছে: int x; Console.WriteLine(x)আইনী ইন্টারেক্টিভ সি # (কারণ xএটি একটি ক্ষেত্র এবং অন্তর্নিহিত সূচনা) তবে void foo() { int x; Console.WriteLine(x); }এটি নয় (কারণ xএটি একটি পরিবর্তনশীল এবং এটি নির্ধারিত হওয়ার আগে ব্যবহৃত হয়)। এছাড়াও, Expression<Func<int>> y = x; ((MemberExpression) y.Body).Member.MemberTypeপ্রকাশ করবে যে xসত্যই ক্ষেত্র এবং স্থানীয় পরিবর্তনশীল নয়।
জেরোইন মোস্টার্ট

0

কিছুটা আলাদা সিনট্যাক্সে হলেও সি # এর ইতিমধ্যে একটি পঠনযোগ্য বৈচিত্র রয়েছে:

নিম্নলিখিত লাইনগুলি বিবেচনা করুন:

var mutable = myImmutableCalculationMethod();
readonly var immutable = mutable; // not allowed in C# 8 and prior versions
return immutable;

তুলনা করা:

var mutable = myImmutableCalculationMethod();
string immutable() => mutable; // allowed in C# 7
return immutable();

স্বীকার করা, প্রথম সমাধান সম্ভবত কম কোড লিখতে পারে। ভেরিয়েবলটি উল্লেখ করার পরে ২ য় স্নিপেটটি কেবল পঠনযোগ্যভাবে স্পষ্ট করে তুলবে।


এটি "কেবল পঠনযোগ্য" নয়। এটি একটি স্থানীয় ফাংশন যা ক্যাপচারেড ভেরিয়েবলটি ফিরিয়ে দেয় .. তাই প্রচুর অযথা ওভারহেড এবং কুরুচিপূর্ণ সিনট্যাক্স যা কোনও কোড অ্যাক্সেসের দৃষ্টিকোণ থেকে অন্তর্নিহিত চলকটি কেবল পঠনযোগ্য করে তোলে না। এছাড়াও, "চপল" সাধারণত বস্তু প্রযোজ্য, না স্থানীয় ভেরিয়েবল .. বিবেচনা করুন: readonly var im = new List<string>(); im.Add("read-only variable, mutable object!");
ব্যবহারকারী 2864740

-2

constকেবলমাত্র পাঠ্যকে পরিবর্তনশীল করতে কীওয়ার্ডটি ব্যবহার করুন ।

রেফারেন্স: https://docs.microsoft.com/en-us/dotnet/csharp/language-references/keywords/const

public class SealedTest
{
    static void Main()
    {
        const int c = 707;
        Console.WriteLine("My local constant = {0}", c);
    }
}

1
আমরা জাভাস্ক্রিপ্ট-স্টাইলে আগ্রহী constযেখানে ভেরিয়েবলটি কেবলমাত্র তার সূচনাকালীন সময়ে নির্ধারিত হতে পারে - সিশার্প-স্টাইল নয় constযেখানে কেবল সংকলন-সময় এক্সপ্রেশন ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, আপনি পারবেন না const object c = new object();তবে একটি readonlyস্থানীয় আপনাকে এটি করার অনুমতি দেবে।
বিনকি

-5

আমি মনে করি এটি এমন কারণ যে কোনও ফাংশন যা কেবলমাত্র পঠনযোগ্য ভেরিয়েবলের সাথে ডাকা যায় না এবং সম্ভবত এটির সুযোগের বাইরে চলে যাওয়ার কিছু আছে এবং আপনার কখন প্রয়োজন হবে?

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