কেন সি # এর বাইরে এবং রেফ উভয়ই আছে?


18

সি শার্প হয়েছে outএবং refকীওয়ার্ড। এই দুটি প্রয়োজনীয় কেন? দাবি অস্বীকার: আমার কাছে সি # সম্পর্কে গভীর জ্ঞান নেই।


3
স্ট্যাক ওভারফ্লোতে কোনও ক্রস-সাইটের সদৃশ নেই?
পিটার মর্টেনসেন


2
আপনি মধ্যে পার্থক্য জন্য জিজ্ঞাসা করা হয় refএবং out? অথবা আপনি কি জিজ্ঞাসা করছেন বাই-রেফারেন্স আর্গুমেন্টগুলির ref/ outবাই-ভ্যালু আর্গুমেন্টের সাথে তুলনা (প্যারামিটারটিতে কোনও পরিবর্তনকারী নেই)? অথবা উভয়?
জেপ্পে স্টিগ নীলসন

1
আমি মনে করি এই প্রশ্নটি একই রকম, তবে বেশ দ্বিধা নয় - অন্তত যদি এটি ভাষা নকশার দৃষ্টিকোণ থেকে নেওয়া হয়
jmoreno

উত্তর:


32

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


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

আপনি কি দয়া করে এ সম্পর্কে বিস্তারিত বলতে পারবেন: 'আউট' এমন কিছু যোগাযোগ করে যা 'রেফ' করে না।
নিও

4
@ নিও: মূলত উত্তরে আমি যা বলেছিলাম: এটি যোগাযোগ করে যে আপনি ইনপুটটির জন্য এটি ব্যবহার করার বিষয়ে চিন্তা করেন না এবং এইভাবে এটি একটি পরমকে অবিচ্ছিন্ন মান প্রদান করা নিরাপদ outকারণ এটি প্রাপ্ত ফাংশনটি এটি থেকে পড়তে পারে না safe ।
ম্যাসন হুইলারের

@ ম্যাসনওহিলার যাচাইকারী দ্বারা এটি অনুমোদিত (এবং / অথবা প্রাপ্তির শেষে কার্যকর করা হয়েছে), তবে কি? অভ্যন্তরীণভাবে আউট কেবল একটি বৈশিষ্ট্য।
র্যান্ডম 832

@ Random832: রবার্ট তার উত্তর অধীনে পোস্ট, এরিক Lippert (সাবেক C # এর কম্পাইলার লোক) কটাক্ষপাত আছে এই আলোচনা stackoverflow.com/q/2876315
ম্যাসন হুইলার

7

এই দুটি কীওয়ার্ড বুঝতে, আপনাকে বোঝার দরকার রেফারেন্সের মাধ্যমে কোনও মান কী দিয়ে যায় । মূলত এটা তার মানে, যদি আপনি প্যারামিটার পরিবর্তনশীল যে আপনার মধ্যে পাস সংশোধন পদ্ধতি বা ফাংশন মধ্যে যে পরিবর্তনশীল তার পরিবর্তিত মান যখন আপনার ফাংশন প্রস্থানের অপরিবর্তিত। এটি কোনও পরামিতি হিসাবে ঘোষণা করে refবা outএটি সম্পাদন করে, যেখানে কোনও সাধারণ প্যারামিটার ভেরিয়েবল তার মূল মান ধরে রাখতে পারে, এমনকি আপনি যদি ফাংশনটিতে এটি পরিবর্তন করেন।

refএবং এর মধ্যে কেবলমাত্র পার্থক্য outহ'ল এটি outআপনাকে ফাংশনে প্রবেশের আগে ভেরিয়েবলটি আরম্ভ করার দরকার refনেই , তবে করে; যখন out আছে ফাংশন মধ্যে পরিবর্তনশীল কিছু নির্ধারণ করার প্রয়োজন, কিন্তু refনা।


বৈকল্পিকতার সাথে কি কোনও পার্থক্য নেই?
মনোলোসেল

স্ট্যাকওভারফ্লো. com
রবার্ট হার্ভে

2

তুমি জিজ্ঞেস করেছিলে.

সি # এর বাইরে এবং রেফ রয়েছে, কেন এই দুটি প্রয়োজন। আমার # সি এর গভীর জ্ঞান নেই। কেন আউট এবং রেফ প্যারামিটার প্রয়োজন?

এবং উত্তরটি হ'ল এগুলি প্রয়োজনীয় নয়, উদাহরণস্বরূপ জাভাটির কোনওটি নেই এবং ভিবিতে কেবল রেফ রয়েছে (এবং কেবল পদ্ধতি ঘোষণায় এটি প্রয়োজন)।

আপনি সহজেই একটি ব্যবহার না করে একটি সম্পূর্ণ প্রোগ্রাম লিখতে পারেন।

এগুলি বিদ্যমান কারণ তারা মাঝে মাঝে দরকারী। এই কারণেই এর মধ্যে দুটি রয়েছে এবং কেবল একটি নয় - কারণ 'এখানে কিছু হ'ল, আপনি চাইলে এটি পরিবর্তন করুন' এবং 'এই জিনিসটিকে একটি নতুন মূল্য দিন' এর মধ্যে পার্থক্য তৈরি করা কার্যকর useful

অন্যান্য ভাষার বিভিন্ন অগ্রাধিকার রয়েছে এবং তাই এগুলি বা সমতুল্য অন্তর্ভুক্ত থাকতে পারে বা নাও থাকতে পারে। তারা উভয়ই কার্যকর কিনা তা নিয়ে দ্বিমত পোষণ করতে পারে এবং তাই সক্রিয়ভাবে এক বা অন্যটি বাস্তবায়নের সিদ্ধান্ত নিতে পারে না।


1

তাদের মূলত উভয়ই refএবং outকোনও পদ্ধতিতে ভেরিয়েবলের ঠিকানাটি পাস করার জন্য একটি প্রক্রিয়া সরবরাহ করে যাতে এটি আপডেট করা যায় - refবা outপরামিতি বরাদ্দকারী কলারের প্রসঙ্গে ভেরিয়েবল আপডেট করে। যেখানে তাদের পার্থক্য রয়েছে তার গ্যারান্টি রয়েছে: outগ্যারান্টি দেয় যে ভেরিয়েবল আপডেট হবে, refনা।

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

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

ব্যবহারের শর্তে: একটি সাধারণ নিয়ম হিসাবে outআমি এমন পরিস্থিতিতে ব্যবহার করি যেখানে আমি যখন প্যারামিটার হিসাবে উপস্থিত হয় এবং refযখন আমি ভেরিয়েবলের বিষয়বস্তু সম্পর্কে চিন্তা করি না।

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