সি # তে পরিবর্তনশীল নামের @ চরিত্রটির ব্যবহার / অর্থ কী?


298

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

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

আমি ভিএস ২০০৮ সি # ডকুমেন্টেশনের মাধ্যমে অনুসন্ধান করেছি কিন্তু এটি সম্পর্কে কিছুই খুঁজে পাইনি। এছাড়াও গুগল অনুসন্ধান করা আমাকে কোনও কার্যকর উত্তর দেয় নি। সুতরাং একটি ভেরিয়েবল / সম্পত্তি নামের '@' অক্ষরটির সঠিক অর্থ বা ব্যবহার কী?

উত্তর:


306

স্ট্রেইট থেকে C # এর ভাষা নির্দিষ্টকরণ , সণাক্তকারী (সি #) :

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


2
.NET সমর্থনকারী টার্গেটেড ন্যূনতম সংস্করণটি @কী?
সেরিও

16
। নেট নিজেই @প্রতীকটি এভাবে সংজ্ঞায়িত করে না , সি # ভাষার স্পেসিফিকেশন করে। এটি এটির প্রথম সংস্করণ সি # 1.0 (.NET 1.0 সহ প্রকাশিত) হওয়ার পর থেকে এটি সমর্থন করে। csharpindepth.com/articles/chapter1/Specifications.aspx
টিম এস

9
আর VB.NET মধ্যে হতাশ যারা, জন্য আপনি ব্যবহার করতে পারেন [ ]একটি ধারণকৃত আইডেন্টিফায়ার, যেমন নির্দিষ্ট করতে Dim [String] As String
মাইক্রোভাইরাস

74

এটি কেবল আপনাকে একটি চলক নাম হিসাবে একটি সংরক্ষিত শব্দ ব্যবহার করতে দেয়। প্রস্তাবিত আইএমএইচও নয় (আপনার মতো কেস বাদে)।


6
@ স্ট্রাইট: +1 প্রস্তাবিত নয় :)
ব্যবহারকারীর 1111

4
> কখনও +1 প্রস্তাবিত নয়, তবে কখনও বলবেন না। উদাহরণস্বরূপ আপনাকে একটি লেগ্যাসি COM ইন্টারফেস প্রয়োগ করতে হবে যা সনাক্তকারী হিসাবে একটি সি # কীওয়ার্ড ব্যবহার করে। বা মাইক্রোসফ্ট ফ্রেমওয়ার্কের নতুন সংস্করণগুলিতে নতুন কীওয়ার্ডগুলি প্রবর্তন করতে পারে - যেমন। নেট 1.1 বন্ড ট্রেডিং অ্যাপ্লিকেশনটিতে ফলন :)
জো

2
@ জো: নতুন yieldকীওয়ার্ডটি কোনও সংরক্ষিত শব্দ নয় এবং এটি কেবল এমন প্রসঙ্গে প্রযোজ্য যেখানে কোনও আইডেন্টিফায়ার আইনীভাবে হাজির হতে পারে না । সি # এর জন্য নতুন বৈশিষ্ট্যগুলি ডিজাইন করার সময় একটি লক্ষ্য হ'ল সেগুলি এমনভাবে তৈরি করা হয় যে কোনও বৈশিষ্ট্য নতুন বৈশিষ্ট্য যুক্ত হওয়ার আগে আইনী হতে পারে তবে পরবর্তীকালে আইনী হবে এবং একই অর্থ থাকবে
সুপারক্যাট

6
@Html.TextboxFor( , , , new { @class="my-css-class" } )ম্যানুয়ালি এইচটিএমএল না লিখে বা জাভাস্ক্রিপ্টের কোনও বৈশিষ্ট্য পরবর্তী পর্যায়ে পরিবর্তন করা ছাড়া আপনি সত্যিই এটির কাছাকাছি যেতে পারেন না এমন একটি উত্তম উদাহরণ।
ফ্ল্যাটার

ওপেন সোর্স সফ্টওয়্যারটিতে একটি নতুন ট্রেন্ড দেখা যায় যেখানে সমস্ত ভেরিয়েবল সি # কোডে "@" প্রতীক সহ উপস্থাপিত হয়। আমি বিশ্বাস করি এটি ভেরিয়েবলের জন্য পিএইচপি সফ্টওয়্যারটিতে এই প্রয়োজনীয়তার পরিচিততার কারণেই হতে পারে। এবং প্রচুর ওপেন সোর্স ওয়েব সিস্টেম এখন সি # তে কোডিং হয়েছে (যেখানে আগে এটি পিএইচপি হত)
নষ্ট_কোডার

36

সি # এ at (@) অক্ষরটি অক্ষরগুলিকে বোঝাতে ব্যবহৃত হয় যা স্পষ্টভাবে ভাষা বর্ণে প্রাসঙ্গিক নিয়ম মেনে চলেন না।

বিশেষত, এটি পরিবর্তনশীল নামের জন্য ব্যবহার করা যেতে পারে যা সংরক্ষিত কীওয়ার্ডগুলির সাথে সংঘর্ষ হয় (উদাহরণস্বরূপ আপনি প্যারাম ব্যবহার করতে পারবেন না তবে পরিবর্তে আপনি @params ব্যবহার করতে পারেন, ভাষার স্পেসিফিকেশনে আউট / রেফ / অন্য কোনও কীওয়ার্ডের সাথে একই)। অতিরিক্তভাবে এটি অনস্কেপড স্ট্রিং আক্ষরিক জন্য ব্যবহার করা যেতে পারে; এটি পথের ধ্রুবকের সাথে বিশেষত প্রাসঙ্গিক, যেমন আপনি পরিবর্তে path = "c:\\temp\\somefile.txt"লিখতে পারেন path = @"c:\temp\somefile.txt"। এটি নিয়মিত প্রকাশের জন্য সত্যই দরকারী।


আকর্ষণীয় পয়েন্ট (এবং দরকারী স্মৃতিচক্র) যে কনভেনশনটি "ভার্ব্যাটিম-" বা " এখানে-স্ট্রিং " এবং পরামিতি নামকরণের মধ্যে একই।
রাফিন

13

পার্লের সিগিলের বিপরীতে, @সি # তে পরিবর্তনশীল নামের আগে একটি উপসর্গটির কোনও অর্থ নেই। যদি xচলক @xহয় তবে একই ভেরিয়েবলের আর একটি নাম।

> string x = "abc";
> Object.ReferenceEquals(x, @x).Dump();
True

তবে @উপসর্গটির একটি ব্যবহার রয়েছে , যেমন আপনি আবিষ্কার করেছেন - আপনি এটি পরিবর্তনশীল নামগুলি পরিষ্কার করতে ব্যবহার করতে পারেন যা সি # অন্যথায় অবৈধ হিসাবে প্রত্যাখ্যান করবে।

> string string;
Identifier expected; 'string' is a keyword

> string @string;

10

@প্রতীক আপনি পরিবর্তনশীল নামের জন্য সংরক্ষিত কীওয়ার্ড ব্যবহার করতে পারবেন। মত @int, @string, @doubleইত্যাদি

উদাহরণ স্বরূপ:

string @public = "Reserved Keyword used for me and its fine";

উপরের কোডটি ঠিকঠাক কাজ করে তবে নীচে কাজ করবে না:

string public = "This will not compile";

4

এটি সহজেই আপনার পরিবর্তনশীল নাম হিসাবে সংরক্ষিত শব্দ ব্যবহার করতে দেয়। আমি eventঅন্য দিন নামে একটি বার চাই । আমি _eventপরিবর্তে যেতে যাচ্ছি , কিন্তু আমার সহকর্মী আমাকে মনে করিয়ে দিয়েছিলেন যে আমি কেবল @eventপরিবর্তে এটি কল করতে পারি ।


3

আরেকটি ব্যবহারের ক্ষেত্রে হ'ল এক্সটেনশন পদ্ধতি। @thisনামের সাথে এর আসল অর্থটি বোঝাতে প্রথম, বিশেষ প্যারামিটারটি আলাদা করা যায় । একটি উদাহরণ:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if (!@this.ContainsKey(key))
        {
            return defaultValue;
        }

        return @this[key];
    }

1

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


1

আপনি এটি ব্যবহার করে চলক নামের মতো সংরক্ষিত কীওয়ার্ডগুলি ব্যবহার করতে পারেন

 int @int = 3; 

সংকলকটি উপেক্ষা করবে @এবং চলকটিকে সংকলন করবেint

চিন্তাধারা ব্যবহার করা কোনও সাধারণ অভ্যাস নয়

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