বিশ্বব্যাপী কি:?


116

সি # তে আমি দেখতে পাই যে global::প্রায়শই স্বয়ংক্রিয়ভাবে উত্পন্ন কোডে ব্যবহৃত হয়। এটি এমন কিছু নয় যা আমি নিজে কখনও ব্যবহার করেছি তাই উদ্দেশ্য কী তা আমি জানি না। কেউ এই ব্যাখ্যা করতে পারেন?




উত্তর:


104

গ্লোবাল বিশ্বব্যাপী নেমস্পেসকে বোঝায়, এটি সমস্যার সমাধান করতে ব্যবহার করা যেতে পারে যার মাধ্যমে আপনি প্রকারগুলি পুনরায় সংজ্ঞায়িত করতে পারেন। উদাহরণ স্বরূপ:

class foo
{
    class System
    {

    }

}

আপনি যদি সিস্টেমটি যেখানে স্থানীয়ভাবে ফু ক্লাসে স্কোপ করা হয় সেখানে ব্যবহার করতে পারেন, আপনি ব্যবহার করতে পারেন:

global::System.Console.WriteLine("foobar");

গ্লোবাল নেমস্পেস অ্যাক্সেস করতে।

উদাহরণ

using System;

class Foo
{
    public void baz()
    {
        Console.WriteLine("Foo 1");
    }
}

namespace Demo
{
    class Foo
    {
        public void baz()
        {
            Console.WriteLine("Foo 2");
        }
    }

    class Program
    {
        protected static global::Foo bar = new global::Foo();

        static void Main(string[] args)
        {
            bar.baz(); // would write Foo 1 to console as it refers to global scope
            Foo qux = new Foo();
            qux.baz(); // would write Foo 2 to the console as it refers to the Demo namespace
        }
    }
}

আমার যদি অটো-জেনারেট ক্লাস থাকে যা ক্লাসের সাথে বিশ্বব্যাপী নেমস্পেসের সাথে উপস্থাপিত থাকে এবং ক্লাসটিকে ফু বলা হয় আমার একটি ক্লাস তৈরি হয়েছিল যার নামও ফাঁসও ছিল না?
— শচীন কৈথ

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

26

এটি রুট নেমস্পেসকে নির্দেশ করে এমন কিছু সময়ের জন্য প্রয়োজনীয় উপসর্গ।

এটি ব্যবহারকারীর কোডের সাথে নামের সংঘর্ষ এড়াতে উত্পন্ন কোডটিতে প্রায়শই যুক্ত হয়।

উদাহরণস্বরূপ, কল্পনা করুন যে আপনার একটি ক্লাস বলা হয়েছিল System, কিন্তু তারপরে আপনি ব্যবহার করতে চেয়েছিলেন System.String। আপনি global::System.Stringপার্থক্য করতে ব্যবহার করতে পারেন ।

আমি বিশ্বাস করি ::আসলটি সি ++ থেকে এসেছে যেখানে এটি নামের স্থান বিভাজক হিসাবে ব্যবহৃত হয়।

অনুশীলনে কোডটি উত্পন্ন করার ব্যতীত আমি কখনও এটি ব্যবহার করি নি। দ্রষ্টব্য যে আপনি উপাধি ব্যবহারের মাধ্যমে কিছু বিবাদও পেতে পারেন। উদাহরণ স্বরূপusing String = System.String;


14

globalপ্রাসঙ্গিক শব্দ, যখন এটি :: অপারেটর সামনে আসে, গ্লোবাল নামস্থান, যা কোনো C # এর প্রোগ্রামের জন্য নেমস্পেস হয় এবং অন্যথায় নামহীন বোঝায়।

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

উদাহরণস্বরূপ, বলুন আপনার যদি নেমস্পেস বি এবং নেমস্পেস বি এবং নেমস্পেস বিএ আছে তবে যদি আমি নাম স্পেস বিএতে কোড লিখি যা গ্লোবাল ছাড়াই নেমস্পেস এ-তে একটি শ্রেণির রেফারেন্স করা দরকার: আমার কাছে এর কাছে যাওয়ার কোনও উপায় নেই। যদি আমি এ।


15
আপনি যদি অনলাইন সংস্থান থেকে সামগ্রী গ্রহণ করেন তবে দয়া করে যথাযথ অনুষঙ্গ সরবরাহের জন্য যথেষ্ট দয়া করুন: এমএসডিএন এবং সি # তে বিশ্ব কীওয়ার্ড কী
— বার্ট

3
কে .. @ বার্ট আপনার মন্তব্যের জন্য ধন্যবাদ আমি যখন পরবর্তী সময়ে উত্তর দিচ্ছি তখন আমি মনে রাখব..কিন্তু কেন এই ডাউনটি কম?
— কোডার

3

global::নামস্থান এবং এটির শনাক্তকারীর অধিকাংশ লোক কি মনে হয়। এটি কোনও অ্যাপ্লিকেশনটিতে তৈরি সমস্ত কিছুর সর্বজনীন পরিচয়দাতা নয় যা আপনার অ্যাপ্লিকেশনটির নির্ধারিত নাম-স্পেসগুলির মধ্যে একটির বাইরে রয়েছে এবং যা কিছু বৈশ্বিক মূলের সাথে সংযুক্ত রয়েছে।

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

আপনি যদি একটি এসপেক্স.সি.এস ফাইলগুলিতে শীর্ষ স্তরের শ্রেণি বা নেমস্পেস তৈরি করেন তবে এটি global::সেই ফাইলে গ্লোবাল নেমস্পেসের মাধ্যমে অ্যাক্সেসযোগ্য । তবে আপনি global::যদি অন্য কোনও ফাইল টাইপ করেন তবে বিশ্বব্যাপী নেমস্পেসে সেই শ্রেণি এবং নেমস্পেসের অস্তিত্ব নেই। আপনি যদি ক্লাস.সি ফাইলগুলিতে একই শ্রেণি বা নেমস্পেস তৈরি করেন তবে সেই আইটেমগুলি সমস্ত অন্যান্য ফাইলের জন্য global::এবং বিশ্বব্যাপী নেমস্পেসের পাশাপাশি সেই স্থানীয় ফাইলের স্কোপগুলিতে উপলব্ধ । কেন?

দেখা যাচ্ছে global::যে ফাইলের ক্ষেত্রের অধীনে শীর্ষ স্তরের লোকাল নামগুলির পাশাপাশি অ্যাসেম্বলি দ্বারা ভাগ করা গ্লোবাল নামগুলির একটি উল্লেখ (যেমন একটি সাধারণ এএসপি.নেট প্রকল্পে আপনার অ্যাপ_কোড শ্রেণীর ফাইলগুলিতে কী সংকলন করা যেতে পারে) এর মতো।

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

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

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