সি # তে জেনেরিক ধরণের হিসাবে কেন 'বাতিল' অনুমোদিত নয়?


53

নকশা সংক্রান্ত সিদ্ধান্তগুলি কী ছিল যা নির্মাণযোগ্য voidনা হওয়ার এবং জেনেরিক ধরণের হিসাবে মঞ্জুরি না দেওয়ার পক্ষে যুক্তি দিয়েছিল ? সর্বোপরি এটি কেবল একটি বিশেষ খালি structএবং পৃথক Funcএবং Actionপ্রতিনিধি থাকার মোট পিআইটিএ এড়ানো যেত ।

(সি ++ স্পষ্টত voidরিটার্ন দেয় এবং voidটেম্পলেট প্যারামিটার হিসাবে অনুমতি দেয় )


13
@ ওডে বিবেচনা করে যে এরিক লিপার্টের একটি অ্যাকাউন্ট রয়েছে এবং প্রোগ্রামারগুলিতে অংশ নিয়েছি, আমার মনে হয় তিনি ঠিক করেছেন।
টমাস ওয়েন্স

2
@ বেনওয়েগট এটির জন্য অবিবাহিতভাবে কোনও ব্যক্তির জ্ঞানের প্রয়োজন হয় না, যদিও এখানে এমন একক ব্যক্তি আছেন যিনি (সহজেই, আমি ধরে নিতে পারি) একক সঠিক উত্তর দিতে পারে। নির্দিষ্টকরণের সাথে পরিচিত যে কেউ সম্ভবত প্রশ্নের উত্তর দিতে পারেন, বিশেষত যদি তাদের কাছে প্রোগ্রামিং ভাষার নকশা সম্পর্কে জ্ঞান থাকে। এটি একটি আকর্ষণীয় ভাষা নকশা / ভাষা বাস্তবায়ন প্রশ্ন, যা এখানে অনন্য বিষয়।
টমাস ওয়েন্স

6
@ বেনভয়েগ: আপনার নিজের পেডেন্ট্রি সন্তুষ্ট করার জন্য আপনি কেন কোনও সঠিক কারণ ছাড়াই পুরোপুরি বৈধ এবং আকর্ষণীয় প্রশ্নটি বন্ধ করতে এত আগ্রহী? আমি একটি অনুসন্ধান ছিল এবং উত্তর খুঁজে পাইনি; সম্ভবত এখানে কেউ এটি সম্পর্কে একটি ব্লগ পোস্ট পড়েছে, সম্ভবত যারা সিদ্ধান্ত নিয়েছেন তারা এই প্রশ্নের উত্তর দিতে চান, হতে পারে যে কেউ এই বিষয়ে সিদ্ধান্ত নিয়েছিল এবং নিজেরাই প্রশ্ন জিজ্ঞাসা করেছিল এমন লোকদের সাথে চ্যাট করতে পেরেছিল এবং উত্তরটি পাস করতে পারে। আমি এই সাইটে পোস্ট করা বন্ধ করেছি এবং খুব ভাল কারণ লোকেরা প্রশ্নের উত্তর দেওয়ার চেয়ে প্রশ্ন বন্ধ করতে আগ্রহী বলে মনে হয়।

4
আমি এখানে "বিগ পয়েন্ট" প্রশ্ন এবং উত্তরগুলি উল্লেখ করতে পারি এবং বিশেষত এসও তে সাধারণত ফর্মের "এই বাক্য গঠনটি কী বোঝায়?" এই প্রশ্নগুলি খুব কমই বন্ধ হয়ে যায় কারণ প্রত্যেকে বস্তুগুলি কাটানোর জন্য কনস্ট পয়েন্টারগুলির সংজ্ঞাগুলি সারণি করতে এবং খুঁজে পেতে পারে। মারাত্মক প্রশ্নগুলি যে পেটানো ট্র্যাকের পাশে পড়ে রয়েছে সেগুলি কোনও পেডেন্টিক কারণে সাইটটি বন্ধ করে দেয়: গুরুত্বের সাথে এটি কোথাও কোনও ডেটা গুদামে কেবলমাত্র কয়েক কিলোবাইট। আমরা কি খুব স্বল্প উদ্দেশ্য পূরণ করে নির্বিচারে ব্যাখ্যা করা নিয়ম চাপিয়ে দেওয়ার পরিবর্তে শিখতে শিথিল করতে এবং আলিঙ্গন করতে পারি?

2
@ থমাস ওভেনস: এসও-র চেয়ে আমি এই সাইটটিতে আরও বেশি সক্রিয়। এই সাইটে আমি প্রতি 300 টিতে প্রায় একটি প্রশ্নের উত্তর পোস্ট করি S তাই আমি প্রতি 1500 এ প্রায় একটি প্রশ্নের উত্তর পোস্ট করি answers সিও # টি প্রশ্নের উত্তরে এসও।
এরিক লিপার্ট

উত্তর:


69

"অকার্যকর" সাথে মূল সমস্যাটি হ'ল এটি অন্য কোনও রিটার্ন টাইপের মতো একই জিনিসটিকে বোঝায় না। "অকার্যকর" অর্থ "যদি এই পদ্ধতিটি ফিরে আসে তবে এটি কোনও মূল্য দেয় না।" নাল না; নাল একটি মান। এটি কোনও মূল্য দেয় না।

এটি প্রকৃতপক্ষে টাইপ সিস্টেমকে বিশৃঙ্খলা করে। কোন ধরণের সিস্টেম হ'ল অপারেশনগুলি নির্দিষ্ট মানগুলিতে বৈধ কি তা সম্পর্কে যৌক্তিক ছাড়ের জন্য একটি সিস্টেম; একটি অকার্যকর রিটার্নিং পদ্ধতি কোনও মান ফেরত দেয় না, সুতরাং প্রশ্ন "এই জিনিসটির জন্য কী অপারেশনগুলি বৈধ?" কিছুতেই কোন ধারণা নেই। বৈধ বা অবৈধ অপারেশন করার জন্য কোনও "জিনিস" নেই।

তদ্ব্যতীত, এটি রানটাইমকে মারাত্মক কিছুতে গোলমাল করে। .NET রানটাইম হ'ল ভার্চুয়াল এক্সিকিউশন সিস্টেমের একটি বাস্তবায়ন, যা স্ট্যাক মেশিন হিসাবে নির্দিষ্ট করা হয়েছে। এটি হ'ল একটি ভার্চুয়াল মেশিন যেখানে ক্রিয়াকলাপগুলি সমস্ত মূল্যায়ন স্ট্যাকের উপর তাদের প্রভাবের দিক থেকে চিহ্নিত হয়। (অবশ্যই বাস্তবে মেশিনটি স্ট্যাক এবং রেজিস্ট্রার উভয়ই মেশিনে প্রয়োগ করা হবে তবে ভার্চুয়াল এক্সিকিউশন সিস্টেমটি কেবল একটি স্ট্যাক অনুমান করে)) একটি শূন্য পদ্ধতিতে একটি কল করার প্রভাব মৌলিকভাবে হয়অ-শূন্য পদ্ধতিতে কল করার প্রভাবের চেয়ে পৃথক; একটি অ-শূন্য পদ্ধতি সর্বদা স্ট্যাকের উপরে কিছু রাখে, যা পপআপ করার প্রয়োজন হতে পারে। একটি শূন্য পদ্ধতি কখনও স্ট্যাকের উপরে কিছু রাখে না। এবং তাই সংকলকটি শূন্য এবং অ-শূন্য পদ্ধতিগুলির ক্ষেত্রে একই পদ্ধতিতে আচরণ করতে পারে না যেখানে পদ্ধতিটির ফেরত মান অগ্রাহ্য করা হয়; যদি পদ্ধতিটি অকার্যকর হয় তবে কোনও রিটার্নের মান নেই তাই কোনও পপ থাকতে হবে না।

এই সমস্ত কারণে, "অকার্যকর" কোনও ধরণের নয় যা তাত্ক্ষণিকভাবে কার্যকর করা যায়; এটির কোনও মূল্য নেই , এটি সম্পূর্ণ বিষয়। এটি বস্তু হিসাবে রূপান্তরযোগ্য নয় এবং একটি অকার্যকর প্রত্যাবর্তন পদ্ধতি কখনও কখনও অ-শূন্য-প্রত্যাবর্তন পদ্ধতিতে বহুরূপে চিকিত্সা করা যায় না কারণ এটি করার ফলে স্ট্যাকটি ক্ষতিগ্রস্ত হয়!

সুতরাং, শূন্যতাটি কোনও ধরণের আর্গুমেন্ট হিসাবে ব্যবহার করা যাবে না, যা আপনি লজ্জাজনক। এটা খুব সুবিধাজনক হবে।

অন্ধত্বের উপকারের সাথে, এটি সংশ্লিষ্ট সকলের পক্ষে আরও ভাল হত যদি কিছু না করে শূন্য-প্রত্যাবর্তনের পদ্ধতিটি স্বয়ংক্রিয়ভাবে "ইউনিট" নামে ফিরে আসে, যা একটি ম্যাজিকাল সিঙ্গলটন রেফারেন্স টাইপ ছিল। তারপরে আপনি জানতেন যে প্রতিটি পদ্ধতি কল স্ট্যাকের উপরে কিছু রাখে , আপনি জানতেন যে প্রতিটি পদ্ধতি কলটি এমন কিছু ফেরত দেয় যা অবজেক্ট টাইপের ভেরিয়েবলের জন্য নির্ধারিত হতে পারে , এবং অবশ্যই ইউনিট টাইপ আর্গুমেন্ট হিসাবে ব্যবহার করা যেতে পারে , তাই সেখানে থাকবে আলাদা অ্যাকশন এবং ফানক প্রতিনিধি প্রকারের দরকার নেই। দুঃখের বিষয়, আমরা যে পৃথিবীতে আছি তা নয়।

এই শিরাতে আরও কিছু ধারণার জন্য দেখুন:


সি ++ এটি কোনও জাদুকরী সিঙ্গলটন প্রকার ব্যবহার না করে সমর্থন করে। তবে আমি ধরে নিই যে সি ++ এর সাথে সম্পূর্ণ ভিন্ন "জেনেরিক্স" স্টাইল ব্যবহার করে সি # করা উচিত।
উইনস্টন ইওয়ার্ট

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

1
আমি মনে করি স্ট্যাকের উপর সঠিক স্থান নির্ধারণের জন্য এবং অন্যান্য জায়গাগুলিতে যেখানে সেগুলি অন্তর্ভুক্ত রয়েছে সেখানে সংকলনের সময় সমস্ত স্ট্রাক্ট পরিচালনা করা হয়। সুতরাং Void0 স্ট্যাক বাইটের অভ্যন্তরের অসীম পরিমাণ আর্গুমেন্ট হিসাবে পাস করা ঠিক হবে। যখন কোনও কাঠামো রূপান্তর করতে objectবা পদ্ধতির জন্য কল করতে (এটি পেতে this) এটি Typeমেমরির ক্ষেত্রের ক্ষেত্রের আগে manyোকানো রেফারেন্স সহ apিবিতে রাখার সাথে বক্স করা হয় (অনেকগুলি সিএলআর বাস্তবায়নের জন্য) এবং এভাবে সঠিকভাবে পরিচালনা করা যায়। আমার জন্য টাইপ হ'ল অবজেক্টগুলির একটি গ্রেপিং যা কিছু বৈশিষ্ট্য (ক্ষেত্র) দ্বারা আলাদা করা যায়। Voidশুধুমাত্র একটি বস্তু।
ony

1
@ অলিভিয়ার জাকোট-ডেসকোম্বেস: যদি voidকোনও শূন্য মানের প্রকার হয়, তবে সেই বিবৃতিটি মেশিন কোডের শূন্য নির্দেশাবলীতে অনুবাদ করে। হার্ড-কোডেড ধরণের প্রকারের জন্য খুব কার্যকর নয় Voidতবে এমন ক্ষেত্রে দরকারী যেখানে কোনও ধরণের একাধিক জেনেরিক প্যারামিটার থাকে তবে কিছু ক্ষেত্রে কিছু প্রয়োজন হয় না।
সুপারক্যাট

2
@ এরিকলিপার্ট: মান-প্রকারের রিটার্ন মানগুলির যথাযথ হ্যান্ডলিংয়ের জন্য স্ট্যাকের বাইরে চলক সংখ্যক শব্দ পপ করার দক্ষতার প্রয়োজন হবে। শব্দের সংখ্যা শূন্য হতে দেয়ায় কি কোনও মৌলিক অসুবিধা হবে? যদি কলার স্থান বরাদ্দ এবং বাইরেফ পাস করার জন্য দায়বদ্ধ থাকে তবে টাইপ সিস্টেমটি বুঝতে হবে যে একটি শূন্য বায়ারিফের কোনও অর্থ নেই, এবং সম্ভবত এটি প্রচেষ্টাটির পক্ষে বিবেচিত হয়নি, তবে আমি কোনও "মৌলিক" সমস্যা দেখছি না ।
ক্যাট

9

থেকে: http://connect.microsoft.com/VisualStudio/feedback/details/94226/allow-void-to-be-parameter-of-generic-class-if-not-in-c-then- समाय-in- রানটাইম

এটি আসলে ডিজাইনের মাধ্যমে - আমরা শূন্য প্রকারের কোনও উদাহরণের (রানটাইমের অন্যান্য অনেকগুলি প্রকারের সাথে) অনুমতি দিই না। আপনি ক্রিয়েটইনস্ট্যান্সকে একটি অকার্যকর বা অকার্যকর [] করতে পারেন না। সুরক্ষার জন্য আমরা এই ধরণের গর্তগুলি প্লাগ করেছি।

আমি আমার জীবনের পক্ষে দেখতে পাচ্ছি না যে সুরক্ষা গর্তটি কতটা অকার্যকর, তবে ... এরকমই বলা আছে।

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