আপনি কি দয়া করে ব্যাখ্যা করতে পারবেন যে internal
সি # তে কীওয়ার্ডের জন্য ব্যবহারিক ব্যবহার কী ?
আমি জানি যে internal
সংশোধকটি বর্তমান সমাবেশে অ্যাক্সেস সীমাবদ্ধ করে, তবে কখন এবং কোন পরিস্থিতিতে আমার এটি ব্যবহার করা উচিত?
আপনি কি দয়া করে ব্যাখ্যা করতে পারবেন যে internal
সি # তে কীওয়ার্ডের জন্য ব্যবহারিক ব্যবহার কী ?
আমি জানি যে internal
সংশোধকটি বর্তমান সমাবেশে অ্যাক্সেস সীমাবদ্ধ করে, তবে কখন এবং কোন পরিস্থিতিতে আমার এটি ব্যবহার করা উচিত?
উত্তর:
ইউটিলিটি বা সহায়ক ক্লাস / পদ্ধতিগুলি যা আপনি একই সমাবেশের মধ্যে অন্যান্য অনেক ক্লাস থেকে অ্যাক্সেস করতে চান তবে আপনি অন্যান্য সম্মেলনে কোডটি অ্যাক্সেস করতে পারবেন না তা নিশ্চিত করতে চান।
এমএসডিএন থেকে (আর্কাইভ.অর্গের মাধ্যমে):
অভ্যন্তরীণ অ্যাক্সেসের একটি সাধারণ ব্যবহার উপাদান-ভিত্তিক বিকাশে হয় কারণ এটি অ্যাপ্লিকেশন বাকী বাকী অংশটি প্রকাশ না করেই একগুচ্ছ উপাদানকে ব্যক্তিগতভাবে সহযোগিতা করতে সক্ষম করে। উদাহরণস্বরূপ, গ্রাফিকাল ইউজার ইন্টারফেস তৈরির জন্য একটি কাঠামো নিয়ন্ত্রণ এবং ফর্ম শ্রেণি সরবরাহ করতে পারে যা সদস্যদের অভ্যন্তরীণ অ্যাক্সেস সহ সহযোগিতা করে। যেহেতু এই সদস্যগুলি অভ্যন্তরীণ, তাই তারা ফ্রেমওয়ার্কটি ব্যবহার করছে এমন কোডের সংস্পর্শে আসে না।
InternalsVisibleTo
টার্গেট অ্যাসেম্বলি অভ্যন্তরীণ ক্লাসগুলিতে বিশেষ অ্যাক্সেস প্রাপ্ত এমন "বন্ধু" সমাবেশগুলি তৈরি করতে আপনি সমাবেশ স্তরের বৈশিষ্ট্য সহ অভ্যন্তরীণ সংশোধকও ব্যবহার করতে পারেন ।
এটি ইউনিট টেস্টিং অ্যাসেম্বলিগুলি তৈরির জন্য কার্যকর হতে পারে যেগুলি তারপরে সমাবেশের অভ্যন্তরীণ সদস্যদের পরীক্ষা করার জন্য অনুমতি দেওয়া হয়। অবশ্যই অন্য কোনও অ্যাসেমব্লিকে এই স্তরের অ্যাক্সেস মঞ্জুর করা হয় না, সুতরাং আপনি যখন আপনার সিস্টেমটি ছেড়ে দেন তখন এনক্যাপসুলেশন বজায় থাকে।
যদি ববকে বিগআইম্পোর্টান্ট ক্লাসের প্রয়োজন হয় তবে ববকে এই প্রকল্পের মালিকানাধীন লোকদের নিশ্চয়তা দেওয়ার জন্য সাইন আপ করতে হবে যে বিগআইপোর্টান্ট ক্লাস তার চাহিদা পূরণের জন্য লিখিত হবে, এটি তার চাহিদা পূরণ করে তা নিশ্চিত করার জন্য পরীক্ষা করা হয়েছে, এবং তার প্রক্রিয়াটি একটি প্রক্রিয়া হিসাবে প্রেরণ করা হয়েছে এটি যাতে আর পরিবর্তিত হয় না যাতে তার প্রয়োজনগুলি আর পূরণ না হয় সেজন্য স্থাপন করা হবে।
যদি কোনও শ্রেণি অভ্যন্তরীণ হয় তবে সে প্রক্রিয়াটি অতিক্রম করতে হবে না, যা প্রকল্প এ এর জন্য বাজেট সংরক্ষণ করে যা তারা অন্যান্য জিনিসগুলিতে ব্যয় করতে পারে।
অভ্যন্তরীণ বিষয়টি এটি নয় যে এটি ববকে জীবনকে কঠিন করে তোলে। এটি এটি আপনাকে প্রকল্প কী বৈশিষ্ট্যগুলি, আজীবন, সামঞ্জস্যতা এবং এগুলি সম্পর্কে ব্যয়বহুল প্রতিশ্রুতি দেয় তা নিয়ন্ত্রণ করতে দেয়।
অভ্যন্তরীণ ব্যবহারের আর একটি কারণ হ'ল যদি আপনি আপনার বাইনারিগুলিকে অবহেলা করেন। বিস্ময়কর জানে যে কোনও অভ্যন্তরীণ শ্রেণীর শ্রেণির নাম স্ক্যাম্বল করা নিরাপদ, যদিও পাবলিক ক্লাসের নাম স্ক্রাম্বল করা যায় না, কারণ এটি বিদ্যমান রেফারেন্সগুলি ভেঙে দিতে পারে।
আপনি যদি এমন কোনও ডিএলএল লিখছেন যা সাধারণ পাবলিক এপিআইতে একটি টন জটিল কার্যকারিতা আবদ্ধ করে, তবে শ্রেণীর সদস্যদের জন্য "অভ্যন্তরীণ" ব্যবহৃত হয় যা প্রকাশ্যে প্রকাশ করা যায় না।
হাইডিং জটিলতা (ওরফে এনক্যাপসুলেশন) মানসম্পন্ন সফ্টওয়্যার ইঞ্জিনিয়ারিংয়ের প্রধান ধারণা।
অভ্যন্তরীণ কীওয়ার্ডটি ভারী ব্যবহৃত হয় যখন আপনি অ-পরিচালিত কোডের উপরে একটি মোড়ক তৈরি করেন।
আপনি যখন DllImport করতে চান এমন একটি সি / সি ++ ভিত্তিক লাইব্রেরি রাখলে আপনি এই ফাংশনগুলি একটি শ্রেণির স্থির ফাংশন হিসাবে আমদানি করতে পারেন এবং সেগুলি অভ্যন্তরীণ করে তুলতে পারেন, সুতরাং আপনার ব্যবহারকারীর কেবল আপনার মোড়কের অ্যাক্সেস থাকতে পারে এবং আসল এপিআই নয় যাতে এটি সম্ভব না যে কোন কিছুর সাথে গণ্ডগোল আপনার প্রয়োজনীয় একাধিক মোড়কের ক্লাসের জন্য আপনি কার্যগুলি স্থিতিশীল হওয়ার কারণে এটি সমাবেশের যে কোনও জায়গায় ব্যবহার করতে পারেন।
আপনি মনোঃ কায়রো একবার দেখে নিতে পারেন, এটি কায়রো লাইব্রেরির চারপাশে একটি মোড়ক যা এই পদ্ধতির ব্যবহার করে।
"আপনি যতটা সম্ভব কঠোর সংশোধক ব্যবহার করুন" দ্বারা চালিত হওয়ার কারণে আমি যেখানেই অভ্যন্তরীণ ব্যবহার করি না কেন, অন্য ক্লাস থেকে যে পদ্ধতিতে আমার স্পষ্টভাবে অন্য কোনও সমাবেশ থেকে অ্যাক্সেস না করা দরকার আমি অন্য ক্লাস থেকে এই পদ্ধতিটি ব্যবহার করতে চাই।
যেহেতু অ্যাসেম্বলি ইন্টারফেসটি সাধারণত তার ক্লাস ইন্টারফেসের যোগফলের চেয়ে বেশি সংকীর্ণ হয় তাই আমি এটি ব্যবহার করি এমন অনেকগুলি জায়গা রয়েছে।
আমি অভ্যন্তরীণ অনেক বেশি অপ্রয়োজনীয় বলে মনে করি। আপনার সত্যিকারের নির্দিষ্ট ফাংশনটি কেবল নির্দিষ্ট শ্রেণীর কাছে প্রকাশ করা উচিত নয় যা আপনি অন্যান্য গ্রাহকদের কাছে করবেন না।
এটি আমার মতে ইন্টারফেসটি ভেঙে দেয়, বিমূর্ততাটি ভেঙে দেয়। এটি কখনও ব্যবহার করা উচিত নয় এটি বলার অপেক্ষা রাখে না, তবে আরও ভাল সমাধান হ'ল কোনও ভিন্ন শ্রেণীর রিফ্যাক্টর বা সম্ভব হলে ভিন্ন উপায়ে ব্যবহার করা। তবে এটি সর্বদা সম্ভব নাও হতে পারে।
যে কারণে এটি সমস্যার কারণ হতে পারে তা হ'ল অন্য বিকাশকারীকে একই সমাবেশে অন্য শ্রেণি তৈরি করার অভিযোগ আনা যেতে পারে yours অভ্যন্তরীণ থাকা বিমূর্ততার স্বচ্ছতা হ্রাস করে এবং অপব্যবহার করা হলে সমস্যা সৃষ্টি করতে পারে। এটি একই সমস্যা হবে যেমন আপনি এটি সর্বজনীন করেছেন। অন্যান্য বিকাশকারী যে অন্যান্য শ্রেণি তৈরি করছেন তা এখনও কোনও বহিরাগত শ্রেণীর মতোই গ্রাহক। শ্রেণীর বিমূর্ততা এবং এনক্যাপসুলেশন কেবল বাহ্যিক শ্রেণীর জন্য / থেকে সুরক্ষা নয়, তবে যে কোনও এবং সমস্ত শ্রেণীর জন্য।
অন্য সমস্যাটি হ'ল অনেকগুলি বিকাশকারী মনে করবেন যে তারা এটি সমাবেশে অন্য কোথাও ব্যবহার করার প্রয়োজন হতে পারে এবং এটিকে যেভাবেই অভ্যন্তরীণ হিসাবে চিহ্নিত করতে পারে, যদিও তাদের সময় এটি প্রয়োজন ছিল না। অন্য কোনও বিকাশকারী এটি গ্রহণের জন্য এটি সেখানে মনে করতে পারে। সাধারণত আপনার নির্দিষ্ট প্রয়োজন না হওয়া পর্যন্ত আপনি ব্যক্তিগত চিহ্নিত করতে চান।
তবে এর কয়েকটি বিষয়গত হতে পারে এবং আমি বলছি না এটি কখনই ব্যবহার করা উচিত নয়। দরকার হলে শুধু ব্যবহার করুন।
আমি মনে করতে পারি না এমন একটি ব্লগে অন্য দিন, সম্ভবত সপ্তাহে একটি আকর্ষণীয় দেখেছি। মূলত আমি এর জন্য ক্রেডিট নিতে পারি না তবে আমি ভেবেছিলাম এটিতে কিছু কার্যকর প্রয়োগ থাকতে পারে।
বলুন যে আপনি একটি বিমূর্ত শ্রেণিটি অন্য কোনও সংসদ দ্বারা দেখা হোক তবে আপনি চান না যে কেউ এর থেকে উত্তরাধিকার সূত্রে সক্ষম হয়। সিলযুক্ত কাজ করবে না কারণ এটি একটি কারণের জন্য বিমূর্ত, এই সমাবেশের অন্যান্য শ্রেণিগুলি এর উত্তরাধিকার সূত্রে প্রাপ্ত। প্রাইভেট কাজ করবে না কারণ আপনি অন্য সমাবেশে কোথাও একটি পিতামাতার ক্লাস ঘোষণা করতে চাইতে পারেন।
নেমস্পেস বেস .অসাধারণ { জনসাধারণের বিমূর্ত ক্লাস প্যারেন্ট { অভ্যন্তরীণ অ্যাবস্ট্রাক্ট শূন্যরূপী সামমথোদ (); } // এটি একই সমাবেশে আসার পরে এটি ঠিকঠাক কাজ করে। পাবলিক ক্লাস চাইল্ড উইথিন: পিতা বা মাতা { অভ্যন্তরীণ ওভাররাইড শূন্যস্থান সোমথথ () { } } } নেমস্পেস আরেকটি। অসম্পূর্ণ { // কাবুম, কারণ আপনি কোনও অভ্যন্তরীণ পদ্ধতি ওভাররাইড করতে পারবেন না পাবলিক ক্লাস চাইল্ড আউটসাইড: পিতা বা মাতা { } পাবলিক ক্লাস পরীক্ষা { //শুধুই সুন্দর প্রাইভেট প্যারেন্ট _ প্যারেন্ট; পাবলিক টেস্ট () { // এখনও ঠিক আছে _ পিতামাতা = নতুন চাইল্ডবিথিন (); } } }
আপনি দেখতে পাচ্ছেন, এটি কার্যকরভাবে কাউকে উত্তরাধিকার সূত্রে সক্ষম না হয়ে পিতামাতার শ্রেণিটি ব্যবহার করার অনুমতি দেয়।
এই উদাহরণে দুটি ফাইল রয়েছে: এসেম্বলি 1 সি এবং এসেম্বলি 2 সিএস। প্রথম ফাইলটিতে একটি অভ্যন্তরীণ বেস শ্রেণি রয়েছে, বেসক্লাস। দ্বিতীয় ফাইলটিতে বেসক্লাস ইনস্ট্যান্ট করার একটি প্রচেষ্টা ত্রুটি তৈরি করবে will
// Assembly1.cs
// compile with: /target:library
internal class BaseClass
{
public static int intM = 0;
}
// Assembly1_a.cs
// compile with: /reference:Assembly1.dll
class TestAccess
{
static void Main()
{
BaseClass myBase = new BaseClass(); // CS0122
}
}
এই উদাহরণে, উদাহরণস্বরূপ আপনি একই ফাইলগুলি ব্যবহার করুন 1 এবং বেসক্লাসের অ্যাক্সেসযোগ্যতার স্তরটিকে জনসাধারণে পরিবর্তন করুন । অভ্যন্তরীণ সদস্য সদস্য এর অ্যাক্সেসযোগ্যতা স্তর পরিবর্তন করুন । এই ক্ষেত্রে, আপনি ক্লাসটি ইনস্ট্যান্ট করতে পারেন, তবে আপনি অভ্যন্তরীণ সদস্যকে অ্যাক্সেস করতে পারবেন না।
// Assembly2.cs
// compile with: /target:library
public class BaseClass
{
internal static int intM = 0;
}
// Assembly2_a.cs
// compile with: /reference:Assembly1.dll
public class TestAccess
{
static void Main()
{
BaseClass myBase = new BaseClass(); // Ok.
BaseClass.intM = 444; // CS0117
}
}
উত্স : http://msdn.microsoft.com/en-us/library/7c5ka91b(VS.80).aspx
যখন আপনার কাছে এমন পদ্ধতি, ক্লাস ইত্যাদি রয়েছে যা বর্তমান সমাবেশের ক্ষেত্রের মধ্যে অ্যাক্সেসযোগ্য হওয়া দরকার এবং এর বাইরে কখনও নয়।
উদাহরণস্বরূপ, একটি ডালের একটি ওআরএম থাকতে পারে তবে ব্যবসায়িক স্তরের সাথে অবজেক্টগুলি প্রকাশ করা উচিত নয় সমস্ত ক্রিয়া স্থিতিশীল পদ্ধতিগুলির মাধ্যমে এবং প্রয়োজনীয় প্যারামিটারগুলিতে পাস করা উচিত।
অভ্যন্তরীণ একটি খুব আকর্ষণীয় ব্যবহার - অভ্যন্তরীণ সদস্য সহ অবশ্যই এটি যে সমাবেশে ঘোষণা করা হয়েছে কেবল তার মধ্যে সীমাবদ্ধ - এটি "বন্ধু" কার্যকারিতা থেকে কিছুটা ডিগ্রি অর্জন করছে। একটি বন্ধু সদস্য এমন একটি জিনিস যা এটি ঘোষিত সমাবেশের বাইরে কেবলমাত্র অন্যান্য কয়েকটি অ্যাসেমব্লিতেই দৃশ্যমান। সিএলআর বন্ধুত্বের পক্ষে সমর্থন করে না;
আপনি বন্ধু সমাবেশ ঘোষণার জন্য ইন্টারনালভিজিবলটোঅ্যাট্রিবিউট ব্যবহার করতে পারেন এবং বন্ধু সমাবেশের মধ্যে থেকে সমস্ত তথ্য আপনার অ্যাসেম্বলিংয়ের অভ্যন্তরীণ সদস্যদেরকে বন্ধু সমাবেশের আওতায় প্রকাশ্য হিসাবে গণ্য করবে। এটির সাথে একটি সমস্যা হ'ল সমস্ত অভ্যন্তরীণ সদস্য দৃশ্যমান; আপনি বাছাই এবং চয়ন করতে পারবেন না।
ইন্টারনালভিজিবলটো-র জন্য একটি ভাল ব্যবহার হ'ল বিভিন্ন অভ্যন্তরীণ সদস্যকে একটি ইউনিট পরীক্ষা সমাবেশে প্রকাশ করা, যাতে এই সদস্যদের পরীক্ষা করার জন্য জটিল প্রতিচ্ছবিগুলির চারপাশের প্রয়োজনীয়তাগুলি দূর করা হয়। সমস্ত অভ্যন্তরীণ সদস্যদের দৃশ্যমান হওয়ায় সমস্যা এতটা নয়, তবে এই পদ্ধতিটি গ্রহণ করা আপনার শ্রেণীর ইন্টারফেসগুলি বেশ ভারী করে তুলেছে এবং সম্ভাব্যভাবে ঘোষিত সমাবেশের অভ্যন্তরে এনক্যাপসুলেশন নষ্ট করতে পারে।
থাম্বের নিয়ম হিসাবে দুই ধরণের সদস্য রয়েছে:
শোরগোল হ্রাস, আপনার লাইব্রেরিটি যত কম সহজ প্রকাশ করবেন তত কম। টেম্পার প্রুফিং / সুরক্ষা অন্যটি (যদিও প্রতিচ্ছবি এর বিরুদ্ধে জয়লাভ করতে পারে)।
অভ্যন্তরীণ ক্লাসগুলি আপনাকে আপনার সমাবেশের এপিআই সীমাবদ্ধ করতে সক্ষম করে। আপনার সুবিধাগুলি বোঝার জন্য আপনার এপিআইকে সহজ করার মতো এর সুবিধা রয়েছে benefits
এছাড়াও, যদি আপনার সমাবেশে কোনও ত্রুটি উপস্থিত থাকে তবে ব্রেকিং পরিবর্তন প্রবর্তনের খুব কম সম্ভাবনা রয়েছে। অভ্যন্তরীণ ক্লাস না থাকলে আপনাকে ধরে নিতে হবে যে কোনও শ্রেণীর পাবলিক সদস্য পরিবর্তন করা একটি ব্রেকিং পরিবর্তন হবে। অভ্যন্তরীণ ক্লাসগুলির সাথে, আপনি ধরে নিতে পারেন যে তাদের সর্বজনীন সদস্যদের সংশোধন করা কেবল সমাবেশের অভ্যন্তরীণ এপিআই ভেঙে দেয় (এবং কোনও ইন্টারন্যাশনাল ভিজিবলটো বৈশিষ্ট্যে উল্লিখিত) break
আমি ক্লাস পর্যায়ে এবং অ্যাসেম্বলি পর্যায়ে এনক্যাপসুলেশন পছন্দ করি। এমন কেউ কেউ আছেন যারা এর সাথে দ্বিমত পোষণ করেন তবে কার্যকারিতাটি উপলব্ধ কিনা তা জেনে আনন্দিত।
আমার কাছে একটি প্রকল্প রয়েছে যা ডেটা ব্যাক-এন্ডের জন্য লিনিক-টু-এসকিউএল ব্যবহার করে। আমার দুটি প্রধান নেমস্পেস রয়েছে: বিজ এবং ডেটা। লিনকিউ ডেটা মডেল ডেটাতে থাকে এবং "অভ্যন্তরীণ" হিসাবে চিহ্নিত হয়; বিজ নেমস্পেসে সার্বজনীন ক্লাস রয়েছে যা লিনকুই ডেটা ক্লাসকে ঘিরে রাখে।
সুতরাং আছে Data.Client
, এবং Biz.Client
; পরবর্তীকালে ডেটা অবজেক্টের সমস্ত প্রাসঙ্গিক বৈশিষ্ট্য প্রকাশ করা হয়, যেমন:
private Data.Client _client;
public int Id { get { return _client.Id; } set { _client.Id = value; } }
বিজ অবজেক্টগুলির একটি ব্যক্তিগত নির্মাণকারী রয়েছে (কারখানার পদ্ধতি ব্যবহারের জন্য বাধ্য করতে), এবং একটি অভ্যন্তরীণ নির্মাতা যা দেখতে এটি দেখতে:
internal Client(Data.Client client) {
this._client = client;
}
এটি গ্রন্থাগারের যে কোনও ব্যবসায়িক শ্রেণীর দ্বারা ব্যবহার করা যেতে পারে, তবে ব্যবসায়ের স্তরটি সর্বদা একজন মধ্যস্থতাকারী হিসাবে কাজ করে তা নিশ্চিত করে ফ্রন্ট-এন্ডের (ইউআই) সরাসরি ডেটা মডেল অ্যাক্সেস করার কোনও উপায় নেই।
এই প্রথম আমি সত্যিই internal
অনেক বেশি ব্যবহার করেছি এবং এটি বেশ কার্যকর প্রমাণিত হচ্ছে।
এমন কিছু বিষয় রয়েছে যখন ক্লাসের সদস্য করার বিষয়টি বোধগম্য হয় internal
। ক্লাসগুলি কীভাবে ইনস্ট্যান্ট করা হয় তা নিয়ন্ত্রণ করতে চাইলে একটি উদাহরণ হতে পারে; ধরা যাক আপনি শ্রেণীর উদাহরণ তৈরির জন্য কোনও ধরণের কারখানা সরবরাহ করেছেন। আপনি নির্মাণ করতে পারেনinternal
, যাতে কারখানাটি (যে একই সমাবেশে থাকে) শ্রেণীর উদাহরণ তৈরি করতে পারে, তবে that সমাবেশের বাইরের কোডটি এটি করতে পারে না।
তবে আমি internal
নির্দিষ্ট কারণ ছাড়াই ক্লাস বা সদস্য তৈরির সাথে কোনও বক্তব্য দেখতে পাচ্ছি না , কেবল তাদের নির্দিষ্ট করা public
বা private
নির্দিষ্ট কারণ ছাড়াই বোধগম্য ।
আমি কেবলমাত্র অভ্যন্তরীণ কীওয়ার্ডটি ব্যবহার করেছি যা আমার পণ্যের লাইসেন্স-চেকিং কোড ;-)
অভ্যন্তরীণ কীওয়ার্ডের একটি ব্যবহার হল আপনার সমাবেশের ব্যবহারকারীর কাছ থেকে কংক্রিট প্রয়োগের অ্যাক্সেস সীমাবদ্ধ করা।
যদি আপনার কারখানা বা অন্য কোনও কেন্দ্রীয় অবস্থান অবজেক্টগুলি তৈরির জন্য থাকে তবে আপনার সমাবেশের ব্যবহারকারীর কেবল পাবলিক ইন্টারফেস বা বিমূর্ত বেস শ্রেণীর সাথে ডিল করতে হবে।
এছাড়াও, অভ্যন্তরীণ নির্মাতারা আপনাকে কখন এবং কখন অন্যথায় সরকারী শ্রেণি ইনস্ট্যান্ট করা হয় তা নিয়ন্ত্রণ করতে দেয়।
এটি সম্পর্কে কীভাবে: সাধারণত এটি সুপারিশ করা হয় যে আপনি কোনও সমাবেশের বহিরাগত ব্যবহারকারীদের জন্য কোনও তালিকা অবজেক্টটি প্রকাশ করবেন না, বরং একটি আইএনমেবারেবল প্রকাশ করবেন। তবে সমাবেশের ভিতরে একটি তালিকা অবজেক্ট ব্যবহার করা অনেক সহজ, কারণ আপনি অ্যারে সিনট্যাক্স এবং অন্যান্য সমস্ত তালিকা পদ্ধতি পান। সুতরাং, আমার কাছে সাধারণত একটি অভ্যন্তরীণ সম্পত্তি থাকে যা সমাবেশের ভিতরে ব্যবহারের জন্য একটি তালিকা প্রকাশ করে।
মন্তব্যগুলি এই পদ্ধতির বিষয়ে স্বাগত।
মনে রাখবেন যে হিসাবে বর্ণিত কোনও শ্রেণি public
স্বয়ংক্রিয়ভাবে ইন্টেলিসেন্সে প্রদর্শিত হবে যখন কেউ আপনার প্রকল্পের নাম স্থানটি দেখবে। একটি এপিআই দৃষ্টিকোণ থেকে, কেবলমাত্র আপনার প্রকল্পের ব্যবহারকারীদের তারা ব্যবহার করতে পারে এমন ক্লাসগুলি দেখানো গুরুত্বপূর্ণ। কী- internal
ওয়ার্ডটি তাদের দেখা উচিত নয় এমন জিনিসগুলি গোপন করতে ব্যবহার করুন ।
যদি আপনার Big_Important_Class
প্রকল্পের জন্য আপনার প্রকল্পটি বাইরে ব্যবহারের উদ্দেশ্যে করা হয়, তবে আপনার এটি চিহ্নিত করা উচিত নয় internal
।
যাইহোক, অনেক প্রকল্পে, আপনার প্রায়শই ক্লাস থাকে যা সত্যই কেবল কোনও প্রকল্পের ভিতরে ব্যবহারের উদ্দেশ্যে তৈরি হয়। উদাহরণস্বরূপ, আপনার কাছে এমন একটি শ্রেণি থাকতে পারে যা প্যারামিটারাইজড থ্রেড অনুরোধের জন্য আর্গুমেন্টগুলি ধারণ করে। এই ক্ষেত্রে, আপনার এগুলি চিহ্নিত করা উচিত internal
যেন কোনও অনিচ্ছাকৃত এপিআই থেকে নিজেকে রক্ষা না করে অন্য কোনও কারণে রাস্তায় নেমে যাওয়া।
private
শব্দ শুধুমাত্র শ্রেণী structs যে অন্য বর্গ বা struct মধ্যে সংজ্ঞায়িত করা হয় ব্যবহার করা যেতে পারে। একটি নেমস্পেসের মধ্যে সংজ্ঞায়িত শ্রেণি কেবলমাত্র ঘোষিত হতে পারে public
বা internal
।
ধারণাটি হ'ল আপনি যখন কোনও গ্রন্থাগার ডিজাইন করছেন কেবল তখন বাইরে থেকে আপনার ক্লাসগুলি ব্যবহারের উদ্দেশ্যে তৈরি করা (আপনার গ্রন্থাগারের ক্লায়েন্টদের দ্বারা) সর্বজনীন হওয়া উচিত। আপনি ক্লাস যে এই গোপন করতে পারেন
প্রভৃতি
আপনি যদি অভ্যন্তরীণ উপাদানগুলির ব্যবহারের চেয়ে আভ্যন্তরীণ সমাধানগুলি বিকাশ করছেন তবে আমার ধারনাটি তেমন গুরুত্বপূর্ণ নয়, কারণ সাধারণত ক্লায়েন্টদের সাথে আপনার এবং / অথবা কোডটিতে অ্যাক্সেস থাকবে constant যদিও তারা গ্রন্থাগার বিকাশকারীদের পক্ষে যথেষ্ট সমালোচিত।
যখন আপনার ক্লাস বা পদ্ধতি রয়েছে যা অবজেক্ট-ওরিয়েন্টড প্যারাডিজমের সাথে পরিষ্কারভাবে ফিট করে না, যা বিপজ্জনক জিনিসগুলি করে, যা আপনার নিয়ন্ত্রণের অধীনে অন্যান্য শ্রেণি এবং পদ্ধতিগুলি থেকে ডাকতে হবে এবং যা আপনি অন্য কাউকে ব্যবহার করতে দিতে চান না ।
public class DangerousClass {
public void SafeMethod() { }
internal void UpdateGlobalStateInSomeBizarreWay() { }
}