সি # তে অভ্যন্তরীণ বনাম পাবলিক


92

আমি এর মধ্যে পার্থক্য জানতে চাই publicএবং internalদৃশ্যমানতা সংশোধনকারীদের।

আমাদের কখন internalক্লাসে ব্যবহার করা উচিত এবং কখন public? আমি একটি পদ্ধতি থাকা উচিত সঙ্গে গুলিয়ে ফেলা করছি publicবা internal।

আমি পড়েছি যে internalবিধানসভা মাধ্যমে অ্যাক্সেস করা যেতে পারে, এবং publicবিধানসভা যেখানে পার্থক্য আছে সেখানেও ব্যবহার করা যেতে পারে।

উত্তর:


101

public যে কোনও জায়গা থেকে দৃশ্যমান।

internal শুধুমাত্র একটি সমাবেশের মধ্যে দৃশ্যমান

আপনি কেবল অভ্যন্তরীণ এপিআইগুলিকে সুরক্ষিত করার জন্য অভ্যন্তরীণ ব্যবহারের ঝোঁক। উদাহরণস্বরূপ, আপনি কোনও পদ্ধতির বেশ কয়েকটি ওভারলোডগুলি প্রকাশ করতে পারেন:

public int Add(int x, int y)
public int Add(int x,int y, int z)

উভয়ই অভ্যন্তরীণ পদ্ধতিটিকে কল করে

internal int Add(int[] numbers)

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

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


4
একটি অভ্যন্তরীণ শ্রেণিতে আমি কি পাবলিক পদ্ধতিগুলি ঘোষণা করতে পারি ..?
— NoviceToDotNet

না, কারণ এটি দ্বন্দ্বের কারণ হতে পারে। সংকলক আপনাকে এ সম্পর্কে বলবে এবং সংকলন করতে ব্যর্থ হবে।
— প্রোগ্রাম.এক্স

14
@ প্রোগ্রাম.এক্স: আসলে, আপনি করতে পারেন এবং সংকলক আপনাকে কিছু বলবে না।
— বা ম্যাপার

আসলে আমি এখানে এসেছি গুগল করে আসছি এটি আসলে কোনও বৈশিষ্ট্য কিনা। ক্লাস internalএবং সমস্ত পদ্ধতি তৈরি করার কল্পনা করুন public। আপনার যদি উচ্চতর দৃশ্যমানতার প্রয়োজন হয় তবে আপনি পুরো ক্লাসটি publicআবার সেট করতে পারেন । তবে আমি নিশ্চিত নই, এটি এইভাবে ব্যবহার করা উচিত কিনা। তাই আমি googling চালিয়ে যান ... সম্পাদন করা এট voila, একই বিষয়: stackoverflow.com/questions/9302236/...
— ecth

31

internalআপনি যখন কোনও সদস্য ঘোষণা করতে চান বা কোনও ডিএলএল এর ভিতরে টাইপ করতে চান
, তখন এর বাইরে নয় ... সাধারণত আপনি যখন কোনও সদস্যকে ঘোষণা করেন তখন আপনি Publicঅন্যান্য ডিএলএল থেকে এটি অ্যাক্সেস করতে পারবেন। তবে, আপনার শ্রেণিকালার লাইব্রেরির ভিতরে যদি আপনাকে কিছু প্রকাশ্যে প্রকাশ করার প্রয়োজন হয়, তবে আপনি এটি হিসাবে ঘোষণা করতে পারেন Internal।
আনুষ্ঠানিকভাবে ডিফেনশনে: অভ্যন্তরীণ সদস্যরা কেবল বর্তমান সমাবেশের অভ্যন্তরে দৃশ্যমান ...


11

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


6

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


4

এছাড়াও, চিহ্নিত বৈশিষ্ট্যগুলি ডাব্লুপিএফ-এ ডেটাবাইন্ডিংয়ের জন্য ব্যবহৃত হলে internalএকটি নিক্ষেপ করবে BindingExpression path error। সুতরাং publicসেইগুলি সঠিকভাবে কাজ করার জন্য হতে হবে , এমনকি একই সমাবেশের মধ্যে ডেটাবাইন্ডিংয়ের সময়ও।


1

সাধারণভাবে, publicপদ্ধতিগুলিকে দৃust়তা (খারাপ ইনপুট কারণে ডেটা ক্র্যাশ বা দুর্নীতিগ্রস্থ না করা) এবং সুরক্ষা সচেতনতার (অপ্রত্যাশিত ইনপুটটিকে শোষণের দিকে চালিত করার অনুমতি না দেওয়া) জন্য খুব উচ্চমানের মান পূরণ করা উচিত। কিন্তু জন্য internal, protectedএবং privateপদ্ধতি, এটা প্রায়ই আরো স্বচ্ছন্দ মান অনুসরণ করতে যুক্তিসংগত হবে যেহেতু এক কি ইনপুট প্রতিটি পদ্ধতির গ্রহণ করতে পারে উপর পূর্ণ নিয়ন্ত্রণ আছে।

যেহেতু কোনও publicপদ্ধতিতে পাস হওয়া প্যারামিটারগুলি (সম্ভবত কোনও বাহ্যিক উত্স থেকে) তার নিজস্ব সমাবেশ থেকে প্রাপ্ত প্যারামিটারগুলির তুলনায় কম বিশ্বাসযোগ্য বলে বিবেচিত হয়, অন্যভাবে চিহ্নিত করা পদ্ধতিগুলির তুলনায় কোড বিশ্লেষকরাpublic প্রায়শই চিহ্নিত পদ্ধতিগুলি পৃথকভাবে বিবেচনা করা হয় । উদাহরণ হিসাবে, কোনও পদ্ধতির সাহায্যে বিশ্লেষক আপনাকে সতর্ক করতে পারে যে পদ্ধতির পরামিতিগুলি বাতিল নয় check সঙ্গে পদ্ধতি, এটা বিশ্লেষক কনফিগার করতে সম্পর্কে কম কঠোর হতে করা সম্ভব হতে পারে পরীক্ষণ। বা বিশ্লেষক সমাবেশের জন্য সমস্ত উত্স ফাইলগুলির প্রবাহ বিশ্লেষণ করে এটি নিজেই নির্ধারণ করতে সক্ষম হতে পারেনinternalpublicinternalnullnullআর্গুমেন্ট হিসাবে নির্দিষ্ট পদ্ধতিতে কখনই পাঠানো হবে না এবং এইভাবে প্যারামিটারটি কিনা তা পরীক্ষা করার দরকার নেই তা নির্ধারণ করে null। বিশ্লেষকরা চিকিত্সা publicএবং internalপদ্ধতিগুলি পৃথক পৃথক অন্যান্য অনেক উদাহরণ আছে ।

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


-3

আপনি যদি বাইরে থেকে একত্রিত হওয়া উল্লেখ করতে পারেন তবে আপনার অভ্যন্তরীণ এবং পাবলিক ক্লাসের সুযোগ রয়েছে

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