সর্বাধিক দরকারী বৈশিষ্ট্য [বন্ধ]


784

আমি জানি যে গুণাবলী অত্যন্ত কার্যকর। কিছু পূর্বনির্ধারিত রয়েছে যেমন [Browsable(false)]আপনাকে বৈশিষ্ট্য ট্যাবে বৈশিষ্ট্যগুলি আড়াল করতে দেয়। বৈশিষ্ট্যগুলি ব্যাখ্যা করার জন্য এখানে একটি ভাল প্রশ্ন রয়েছে: .NET এ কী কী বৈশিষ্ট্য রয়েছে?

আপনি আপনার প্রকল্পগুলিতে প্রকৃত সংজ্ঞাযুক্ত বৈশিষ্ট্যগুলি (এবং তাদের নাম স্থান) কী কী ব্যবহার করবেন?


27
কি একটি প্রশ্ন? , পুরো পৃষ্ঠাটি দুর্দান্ত উত্তরে সুন্দর উত্তর দিয়ে উপচে পড়েছে। আমি এটি পড়ার সময়, আমি তার মতামত সম্পর্কে অনেক বিশেষজ্ঞের সাক্ষাত্কারের মতো অভিজ্ঞতা পেয়েছি। প্রশ্নের জন্য +100।
মুথু গণপতি নাথান

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

উত্তর:


669

[DebuggerDisplay]আপনি যখন ডিবাগিংয়ের সময় টাইপের উদাহরণটি মাউস করেন তখন কোনও প্রকারের কাস্টমাইজড আউটপুটটি দ্রুত দেখার জন্য সত্যই সহায়ক হতে পারে। উদাহরণ:

[DebuggerDisplay("FirstName={FirstName}, LastName={LastName}")]
class Customer
{
    public string FirstName;
    public string LastName;
}

ডিবাগারে এটি দেখতে হবে:

বিকল্প পাঠ

এছাড়াও, এটি উল্লেখ করার মতো বিষয় যে সম্পত্তি সেট [WebMethod]সহ অ্যাট্রিবিউটটি CacheDurationওয়েব পরিষেবা পদ্ধতির অপ্রয়োজনীয় বাস্তবায়ন এড়াতে পারে।


62
বাহ, এটা জেনে রাখা ভাল। আমি সাধারণত টসস্ট্রিংকে ওভাররাইড করে একই জিনিসটি সম্পাদন করেছি, তবে এটি আরও ভাল।
ব্রায়ান

17
এটির সাথে সাবধান থাকুন, এটি আপনার সিপিইউ থেকে টসস্ট্রিংয়ের চেয়ে অনেক বড় অংশকে কামড়ায় ites
নিকোলা রাদোসভ্লজেভিć

1
পদ্ধতির ফলাফল প্রদর্শন করতে আপনি এটি ব্যবহার করতে পারেন। পদ্ধতিতে (বা সম্পত্তি-পাওয়া) এর পার্শ্ব প্রতিক্রিয়া থাকলে এটি একটি বিভ্রান্তিকর ডিবাগিংয়ের অভিজ্ঞতা অর্জন করতে পারে।
vyvind Skaar

4
@ NikolaRadosavljević এটি শুধুমাত্র ডিবাগ সময় সিপিইউ ক্ষমতা পর্যন্ত সময় লাগতে হবে
নিকোলে Kondratyev

2
@ নিকোলোয় কন্ড্রাটয়েভ: আমি সমস্ত ইনস এবং আউটগুলিকে জানি না, তবে আপনি নিম্নলিখিত ওয়েব সার্ভিসের সেরা অনুশীলনগুলি একবার দেখে নিতে পারেন যা আপনাকে কিছু সিদ্ধান্তে নিয়ে যেতে পারে: ব্লগস.এমএসএনএন বি
নিকোলা রডোসভ্লজেভিć

273

System.Obsoleteআমার মতে, কাঠামোর অন্যতম কার্যকর বৈশিষ্ট্য। কোড সম্পর্কে সতর্কতা উত্থাপন করার ক্ষমতা যা আর ব্যবহার করা উচিত নয় very আমি বিকাশকারীদের বলার একটি উপায় পেয়ে পছন্দ করি যে কোনও কিছু আর ব্যবহার করা উচিত নয়, পাশাপাশি কেন এবং কেন কিছু করার ভাল / নতুন উপায়ের দিকে ইঙ্গিত করার উপায় রয়েছে।

Conditional attributeডিবাগ ব্যবহারের জন্য খুব সুন্দর সুবিধাজনক। এটি আপনাকে ডিবাগ উদ্দেশ্যে আপনার কোডে এমন পদ্ধতি যুক্ত করার অনুমতি দেয় যা আপনি যখন মুক্তির জন্য সমাধান তৈরি করেন তখন সংকলিত হবে না।

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


50
আপনি সিস্টেমে প্যারামিটারগুলির মধ্যে একটি হিসাবে "সত্য" পাস করতে পারেন bঅবসোলিট যা সতর্কতাটিকে ত্রুটিতে পরিণত করে তাই বিল্ডটি ভেঙে দেয়। অবশ্যই আপনি সমস্ত সতর্কতা পরিষ্কার করে ফেললে এটি করা উচিত। :)
অ্যাড্রিয়ান ক্লার্ক

14
একবার আপনি সমস্ত সতর্কতাগুলি পরিষ্কার করে ফেললে, কেবল পদ্ধতিটি মুছে ফেলা ভাল না?
পেড্রো

10
@ পেড্রো: কখনও কখনও আপনি সামঞ্জস্যের কারণে পিছনে যেতে পারবেন না। যদি এটি ব্যক্তিগত এবং অব্যবহৃত হয় তবে হ্যাঁ, এটি মুছুন।
ফ্যানটিয়াস

3
@ প্লিন্থ একটি ব্যতিক্রম ছুঁড়ে ফেলা অনেক কারণেই খারাপ ধারণা হতে পারে, # 1 হ'ল অপ্রচলিত () ব্যবহারের মূল কারণটি হ'ল আপনি একটি সংক্রমণের পর্যায়ে থাকাকালীন সংকলিত কোডটি চালিয়ে যেতে পারেন। যদি আপনি কাউকে পদ্ধতিতে কল করার অনুমতি দিচ্ছেন না, তবে কেন এটি কেবল মুছবেন না?
ড্যান হারবার্ট

17
@ প্লিন্থ এটি পদ্ধতি ব্যবহার থেকে নতুন কোড প্রতিরোধ করা prevent কোনও পদ্ধতি অপ্রচলিত হিসাবে চিহ্নিত করা হলে পুরানো কোড বাইনারি সামঞ্জস্যপূর্ণ থাকবে, তবে আপনি যদি কোনও ব্যতিক্রম ছুঁড়েন তবে এটি কাজ করা বন্ধ করবে। যদি কেউ "ওবসোল্ট" পতাকাটি ঘুরে দেখার জন্য প্রতিবিম্ব ব্যবহার করে থাকে তবে আপনার আরও খারাপ সমস্যা রয়েছে ...
ড্যান হার্বার্ট

204

[Flags]বেশ সহজ। সিনট্যাকটিক চিনি নিশ্চিত হতে, তবে তবুও সুন্দর।

[Flags] 
enum SandwichStuff
{
   Cheese = 1,
   Pickles = 2,
   Chips = 4,
   Ham = 8,
   Eggs = 16,
   PeanutButter = 32,
   Jam = 64
};

public Sandwich MakeSandwich(SandwichStuff stuff)
{
   Console.WriteLine(stuff.ToString());
   // ...
}

// ...

MakeSandwich(SandwichStuff.Cheese 
   | SandwichStuff.Ham 
   | SandwichStuff.PeanutButter);
// produces console output: "Cheese, Ham, PeanutButter"

লেপি এমন কিছু নির্দেশ করে যা আমি বুঝতে পারি নি, এবং যা এই গুণাবলীর জন্য আমার উত্সাহকে কমিয়ে দেয়: এটি সংকলককে বিরাট সংমিশ্রণগুলিকে গণনার ভেরিয়েবলের বৈধ মান হিসাবে মঞ্জুরি দেওয়ার নির্দেশ দেয় না , সংকলক নির্বিশেষে এটি গণনার জন্য অনুমতি দেয়। আমার সি ++ পটভূমি ... দীর্ঘশ্বাসের মধ্য দিয়ে প্রদর্শিত হচ্ছে


সুতরাং পতাকা বৈশিষ্ট্যগুলি ঠিক কী করে?
আন্দ্রে রেনিয়া

13
আমি আশা করি আপনি ছেলেরা বুঝতে পারবেন যে ফ্ল্যাগের বৈশিষ্ট্যটি সবই বুগার করে। এটি টাইপকনভার্টার বাদে মোটেই প্রয়োজন / ব্যবহার হয় না।
লেপি

3
@ লেপ্পি: টুস্ট্রিং ()ও। তবে ... বাহ! কিছু কারণে, আমি গুণমানটি সি ++ এর মতো না হয়ে গণনার আচরণের প্রত্যাশা করেছিলাম: বা মানগুলি একটি পূর্ণসংখ্যা তৈরি করে (এনম প্যারামের প্রত্যাশা পদ্ধতিতে যেমন পাস করা যায় না)। আমি এখন দেখছি যে এটি হয় না। দুর্বল ... ঠিক আছে, NET enums স্তন্যপান।
শোগ 9

2
[পতাকাগুলি] সত্যই কেবল ডিবাগার এবং .ToString () ফাংশনগুলিকে জানে যে একটি মান সম্ভবত এনামের বিভিন্ন ঘোষণার সংমিশ্রণ। আমি নিশ্চিত নই, এটি আপনাকে আরও কার্যকরভাবে এনাম ব্যবহার করতে ইন্টেলিসেন্স সহায়তা করতে পারে।
কেনজি

31
[Flags]কেবল সিনট্যাকটিক চিনির চেয়ে বড় ব্যবহার রয়েছে। ওয়েব পরিষেবাদি ব্যবহার করার সময়, সিরিয়ালকরণ / ডি-সিরিয়ালাইজেশন কোনও মান SandwichStuff.Cheese | SandwichStuff.Ham | SandwichStuff.Jamপাস করা হলে কাজ করবে না । [Flags]বৈশিষ্ট্য ব্যতীত ডিসরিয়ালাইজার জানতে পারবেন না যে মানটি পতাকাগুলির সংমিশ্রণ হতে পারে। আমার ডাব্লুসিএফ কেন কাজ করছে না এই ভেবে প্রায় দুই দিন ব্যয় করার পরে এই কঠিন পথটি শিখেছে।
আনচিত

177

আমি [DebuggerStepThrough]System.Diagnostics থেকে পছন্দ করি ।

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


5
অনেকবার আমি ইচ্ছা করি আমি এই সম্পত্তি সম্পর্কে জানতাম
wusher

1
এটি বন্ধ হয়ে যাওয়া কেবল লজ্জাজনক - আরও তথ্যের জন্য গ্রেগবিচ . com/blogs/tech/archive/2008/10/17/… দেখুন।
গ্রেগ বিচ

3
আপনি যে কোনও ডাব্লুএমপেইন্ট কোড যে কাজ করে জানেন তার
জন্যও ব্যবহারযোগ্য

@ গ্রেগবিচ সেই ইউআরএল একটি .NET ত্রুটি প্রদান করে। উত্কৃষ্ট! :)
স্ম্রাডার

@ এসএমড্রেজার - অবশ্যই একটি অস্থায়ী সমস্যা হয়ে দাঁড়িয়েছিল, আজ আমার পক্ষে কাজ করছে বলে মনে হচ্ছে।
গ্রেগ বিচ

135

এটি মূল্যবান কিসের জন্য, এখানে সমস্ত। নেট বৈশিষ্ট্যগুলির একটি তালিকা রয়েছে । কয়েকশো আছে।

আমি অন্য কারও সম্পর্কে জানি না তবে আমার কিছু গুরুতর আরটিএফএম করার আছে!


33
পোস্ট তালিকা .net 1.1 জন্য এখানে 3.5 জন্য তালিকা msdn.microsoft.com/en-us/library/system.attribute.aspx (আপনি একটু নিচে স্ক্রল করতে হবে)
kay.one

2
প্রশ্নের লিঙ্কটি আপডেট করেছেন। এখন এটি 3.5 এর সম্পূর্ণ তালিকা
আর মার্টিনহো ফার্নান্দেস

8
প্রকৃতপক্ষে 3.5.৫ নয়, সর্বশেষের সাথে লিঙ্কগুলি।
ব্রায়ান অর্টিজ

1
এখন কেবলমাত্র তালিকাটি কেবল লিঙ্কগুলির একটি তালিকা না হলেও নাম এবং বিবরণ ছিল। আচ্ছা ভালো. @ ব্রায়ানআরটিজ ঠিক আছে। তালিকাটি 4.5 সংস্করণে রয়েছে।
আলোকিত

আপনি কেবলমাত্র শীর্ষে লক্ষ্যবস্তুর কাঠামোটি পরিবর্তন করেছেন যেখানে এটি "অন্যান্য সংস্করণ" বলেছে।
নভেটারটা

129

আমার ভোট হবে Conditional

[Conditional("DEBUG")]
public void DebugOnlyFunction()
{
    // your code here
}

উন্নত ডিবাগিং বৈশিষ্ট্যগুলির সাথে কোনও ফাংশন যুক্ত করতে আপনি এটি ব্যবহার করতে পারেন; যেমন Debug.Write, এটি কেবলমাত্র ডিবাগ বিল্ডগুলিতে ডাকা হয় এবং তাই আপনাকে আপনার প্রোগ্রামের মূল প্রবাহের বাইরে জটিল ডিবাগ যুক্তি সজ্জিত করতে দেয়।


5
এটি কি #if DEBUG করার মতো নয়?
নিল এন

10
কিছুটা, #if DEBUG এর অর্থ হ'ল কলকারীকেও এটি কল করতে হবে না, যখন কন্ডিশিয়োনাল কলটি ছেড়ে দেয় তবে এটি একটি এনওপি করে তোলে যা জেআইটি-তে নির্মূল হয়ে যায়।
রঙিনিক

23
এছাড়াও, আপনি সাধারণত কলগুলির চারপাশে #if DEBUG এবং [শর্তাধীন] পদ্ধতিগুলি ব্যবহার করতে পারেন । সুতরাং আপনি যদি ডিবাগিং পদ্ধতিটি 100 বার কল করেন, এটি বন্ধ করে দেওয়া 100 নয়, একক কোড পরিবর্তনের বিষয়
স্টিভ কুপার

13
রাঙ্গোরিকের মন্তব্য সম্পূর্ণরূপে ভুল (কমপক্ষে সি # এর জন্য): পদ্ধতিটি অশোধিত অন্তর্ভুক্ত করা হয়েছে; কল সাইট নিজেই বাদ দেওয়া হয়। এটিতে কয়েকটি বিভ্রান্তি রয়েছে: পরামিতিগুলি মূল্যায়ন করা হয় না, এবং শর্তসাপেক্ষ পদ্ধতিটি সংকলকটির আউটপুটে অন্তর্নিহিত, থাকে। আপনি এটি প্রতিবিম্ব সহ যাচাই করতে পারেন। msdn.microsoft.com/en-us/library/aa664622.aspx blogs.msdn.com/b/jmstall/archive/2007/10/15/...
মার্ক Sowul

97

আমি সবসময় ব্যবহার DisplayName, Descriptionএবং DefaultValueআমার ব্যবহারকারীর নিয়ন্ত্রণগুলি, কাস্টম নিয়ন্ত্রণ বা কোনো ক্লাস I একটি সম্পত্তি গ্রিডটিতে সম্পাদনা করব পাবলিক বৈশিষ্ট্য উপর বৈশিষ্ট্যাবলী। এই ট্যাগগুলি .NET প্রপার্টিগ্রিড দ্বারা নাম, বিবরণ প্যানেল এবং বোল্ডস মানগুলি ফরম্যাট করতে ব্যবহৃত হয় যা ডিফল্ট মানগুলিতে সেট করা থাকে না।

[DisplayName("Error color")]
[Description("The color used on nodes containing errors.")]
[DefaultValue(Color.Red)]
public Color ErrorColor
{
    ...
} 

আমি কেবল চাই যে Descriptionএক্সএমএল মন্তব্য না পাওয়া গেলে ভিজ্যুয়াল স্টুডিওর ইন্টেলিজেন্স বৈশিষ্ট্যটিকে বিবেচনায় নেবে । এটি একই বাক্য দু'বার পুনরাবৃত্তি করা এড়াতে পারে।


3
বিশ্বাস করো না Descriptionযতক্ষণ না তুমি আগ পর্যন্ত .. এটি
এনামদের

68

[Serializable]এক্সএমএল বা দূরবর্তী সার্ভার থেকে যেমন বহিরাগত ডেটা উত্সগুলিতে এবং থেকে অবজেক্টগুলিকে সিরিয়ালাইজ এবং ডিসাইরিয়ালাইজ করার জন্য ব্যবহৃত হয়। এটি সম্পর্কে এখানে আরও।


এটি আসলে একটি psuedoattribute হিসাবে উল্লেখ করা হয়েছে, যেহেতু সি # [সিরিয়ালিজেবল] এর জন্য একটি মেটাডেটা পতাকা প্রকাশ করে, কাস্টম বৈশিষ্ট্যের উদাহরণ নয়;)
ট্রমাপনি

1
যদিও খুব দরকারী [সিরিয়ালাইজযোগ্য] নিখুঁত থেকে দূরে। আপনি চান ফলাফল পেতে এর জন্য খুব বেশি পরিমাণে টিঙ্কিং এবং পরীক্ষা এবং ত্রুটি দরকার।
শুশ করুন

আমি যে shoosh দ্বিতীয় করব!
জন Bubriski

আপনি যদি স্বয়ংক্রিয় সিরিয়ালাইজেশনের উপর আরও নিয়ন্ত্রণ চান তবে সিস্টেম.অনশায়ারালাইজডঅ্যাট্রিবিউট দরকারী।
সিএসপার্পার

পার্শ্ব নোট হিসাবে আমি যুক্ত করব যে অন্তর্নির্মিত। নেট সিরিয়ালাইজেশনটির কার্য সম্পাদন হ'ল কারুকৃত কোডের চেয়ে ধীরে ধীরে 2 বা 3 প্রস্থের অর্ডার হিসাবে খুব খারাপ pretty
redcalx

57

হাফস্টাডিয়ান স্পিরিটে, [Attribute]বৈশিষ্ট্যটি খুব কার্যকর, কারণ আপনি নিজের বৈশিষ্ট্যগুলি কীভাবে তৈরি করেন এটি। আমি প্লাগইন সিস্টেমগুলি প্রয়োগ করতে, এনামগুলিতে বর্ণনা যুক্ত করতে, একাধিক প্রেরণ এবং অন্যান্য কৌশলগুলি অনুকরণ করার জন্য ইন্টারফেসের পরিবর্তে বৈশিষ্ট্যগুলি ব্যবহার করেছি।


13
সুন্দর লাগছে! আপনি কি প্লাগইন সিস্টেমের কয়েকটি উদাহরণ এবং এনামের বিবরণ প্রদর্শন করতে আপত্তি করবেন? এই দুটি জিনিসই আমি নিজেকে বাস্তবায়নে আগ্রহী!
জন Bubriski

46

ইন্টার্নিশভিজিবলটো আকর্ষণীয় বৈশিষ্ট্য সম্পর্কে পোস্ট এখানে । মূলত এটি কী করে এটি সি ++ বন্ধুদের অ্যাক্সেস কার্যকারিতা নকল করে। এটি ইউনিট পরীক্ষার জন্য খুব কাজে আসে।


7
আপনি কি এমন কিছুর একটি ইউনিট পরীক্ষা হ্যাক করার পক্ষে সহজ হন না যা পরীক্ষা করা যায় না?
the_drow

@the_drow: আপনি সম্পর্কে 'ব্যক্তিগত accessors' কথা বলছে: msdn.microsoft.com/en-us/library/ms184807%28v=vs.80%29.aspx
habakuk

@ হাবাকুক: আসলেই না। এমন কিছু ক্ষেত্রে রয়েছে যেগুলি ইউনিট পরীক্ষার জন্য অভ্যন্তরীণ ক্লাসগুলি প্রকাশ করা উচিত, সাধারণত খারাপ ডিজাইনের কারণে।
the_drow

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

10
@ দ্য_ড্রো আমি আপনার এই দাবির সাথে একমত নই যা internalসর্বজনীন নয়। এটি সমাবেশের মধ্যেই প্রকাশ্য যা পরীক্ষা করা হচ্ছে এবং ইউনিট পরীক্ষা করা উচিত যাতে সমাবেশের অন্যান্য শ্রেণিগুলি এটি সংশোধন কার্যকারিতা ধরে নিতে পারে। আপনি যদি এটি ইউনিট পরীক্ষা না করেন তবে আপনাকে সেবনকারী শ্রেণীর সমস্তগুলিতে এর কাজগুলি পরীক্ষা করতে হবে।
tvanfosson


28

আমি সুপারিশ করব [TestFixture]এবং [Test]- নুনিট লাইব্রেরি থেকে।

আপনার কোডে ইউনিট পরীক্ষাগুলি রিফ্যাক্টরিং এবং কোডেড ডকুমেন্টেশনে সুরক্ষা দেয়।


26
[XmlIgnore]

যেহেতু এটি আপনাকে (যে কোনও এক্সএমএল সিরিয়ালাইজেশনে) 'প্যারেন্ট' অবজেক্টগুলিকে উপেক্ষা করতে দেয় যা অন্যথায় সংরক্ষণের সময় ব্যতিক্রম ঘটায়।


25

এটি সুনির্দিষ্ট নয়, ফ্রেমওয়ার্কে ভাল-সমর্থিত নয়, এবং কোনও প্যারামিটারের প্রয়োজন হবে না, তবে এই বৈশিষ্ট্যটি অপরিবর্তনীয় শ্রেণির জন্য একটি কার্যকর চিহ্নিতকারী:

[ImmutableObject(true)]

6
ডক্স অনুসারে, শুধুমাত্র ডিজাইনের সময় (দুর্ভাগ্যক্রমে) ব্যবহৃত হয়।
হান্স কে st ইং

1
প্রদত্ত যে এটি কেবল ডিজাইন-সময়, সম্ভবত নিজের ImmutableObjectAttributeশ্রেণি তৈরি করা ভাল - কমপক্ষে আপনি প্যারামিটারটি মুছে ফেলতে পারেন।
রায় টিঙ্কার

25

আমি [ThreadStatic]থ্রেড এবং স্ট্যাক ভিত্তিক প্রোগ্রামিংয়ের সাথে একত্রে বৈশিষ্ট্যটি ব্যবহার করতে চাই । উদাহরণস্বরূপ, আমি যদি এমন একটি মান চাই যা আমি কল কলের বাকী অংশের সাথে ভাগ করতে চাই তবে আমি এটি ব্যান্ডের বাইরে (অর্থাত্ কল প্যারামিটারের বাইরে) করতে চাই, তবে আমি এটির মতো কিছু ব্যবহার করতে পারি।

class MyContextInformation : IDisposable {
    [ThreadStatic] private static MyContextInformation current;

    public static MyContextInformation Current {
        get { return current; }
    }

    private MyContextInformation previous;


    public MyContextInformation(Object myData) {
       this.myData = myData;
       previous = current;
       current = this;
    }

    public void Dispose() {
       current = previous;
    }
}

পরে আমার কোডে, আমি আমার কোড থেকে প্রবাহিত লোকগুলিকে ব্যান্ডের বাইরে প্রাসঙ্গিক তথ্য সরবরাহ করতে এটি ব্যবহার করতে পারি। উদাহরণ:

using(new MyContextInformation(someInfoInContext)) {
   ...
}

থ্রেডস্ট্যাটিক অ্যাট্রিবিউট আমাকে কেবল থ্রেডে ডেটা অ্যাক্সেসের অগোছালো সমস্যা এড়াতে শুধুমাত্র থ্রেডে কল করার সুযোগ দেয়।


এবং তারপর কিভাবে অ্যাক্সেস? এখানে আপনার ব্যবহারের নমুনার বিন্দুটি বোঝেন না। তুমি কি ব্যাখ্যা করতে পারো?
বিচওয়াকার

@ বিচওয়াকার কারেন্টটি স্থির হওয়া উচিত, এখনই এটি সম্পাদনা করা উচিত। এখন আপনি MyContextInformation.Currentস্ট্যাকের সক্রিয় প্রসঙ্গটি পেতে অ্যাক্সেস করতে পারেন। এটি এমন একটি বিষয় যা নির্দিষ্ট ক্ষেত্রে খুব ভাল ধারণা, আমাদের (আমার কোম্পানীগুলি) ইঞ্জিন এটিকে অনেকগুলি উদ্দেশ্যে ব্যবহার করে।
ফেলিক্স কে।

23

DebuggerHiddenAttribute যা কোডে পদক্ষেপ যা debugged করা উচিত নয় এড়ানো করতে পারবেন।

public static class CustomDebug
{
    [DebuggerHidden]
    public static void Assert(Boolean condition, Func<Exception> exceptionCreator) { ... }
}

...

// The following assert fails, and because of the attribute the exception is shown at this line
// Isn't affecting the stack trace
CustomDebug.Assert(false, () => new Exception()); 

এছাড়াও এটি স্ট্যাক ট্রেসগুলিতে পদ্ধতিগুলি দেখানো থেকে বিরত রাখে, এমন পদ্ধতি যখন কেবল অন্য পদ্ধতিটি আবৃত করে রাখে তখন দরকারী:

[DebuggerHidden]
public Element GetElementAt(Vector2 position)
{
    return GetElementAt(position.X, position.Y);
}

public Element GetElementAt(Single x, Single y) { ... }

যদি আপনি এখন কল GetElementAt(new Vector2(10, 10))করেন এবং মোড়ানো পদ্ধতিতে কোনও ত্রুটি দেখা দেয়, কল স্ট্যাক সেই পদ্ধতিটি দেখায় না যা পদ্ধতিটি কল করে যা ত্রুটি ছুঁড়ে ফেলে।


21

DesignerSerializationVisibilityAttributeখুব দরকারী। আপনি যখন কোনও নিয়ন্ত্রণ বা উপাদানগুলিতে রানটাইম সম্পত্তি রাখেন, এবং আপনি ডিজাইনার এটি সিরিয়াল করতে চান না, আপনি এটি এটি ব্যবহার করুন:

[DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]
public Foo Bar {
    get { return baz; }
    set { baz = value; }
}

4
উইনফোর্ডস উপাদানগুলির জন্য খুব দরকারী। [ব্রাউজযোগ্য (মিথ্যা)]
মার্ক হিথ

3
ভাল পয়েন্ট - [Browsable(false)]এটি ডিজাইনারের ব্যবহারকারীর কাছ থেকে আড়াল করার জন্য প্রয়োজনীয়, যেখানে [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)]এটি প্রয়োজনীয় যাতে এটি সিরিয়ালযুক্ত হয় না।
কনফিগারেটর

17

কয়েকটি সংখ্যক বৈশিষ্ট্যই সংকলক সমর্থন লাভ করে, তবে গুণাবলীর একটি খুব আকর্ষণীয় ব্যবহার এওপিতে রয়েছে : পোস্টশার্প আপনার বিসপিক বৈশিষ্ট্যগুলিকে আইএল ইনজেক্ট করতে সমস্ত পদ্ধতিতে সক্ষম করে ... লগ / ট্রেসকে তুচ্ছ উদাহরণ হিসাবে দেখায় - তবে কিছু ভাল উদাহরণ স্বয়ংক্রিয় INotifyPropertyChanged বাস্তবায়ন ( এখানে ) এর মতো জিনিস ।

কিছু ঘটে যা সরাসরি সংকলক বা রানটাইমকে প্রভাবিত করে :

  • [Conditional("FOO")] - এই পদ্ধতিতে কলগুলি (যুক্তি মূল্যায়ন সহ) কেবল তখনই ঘটে যখন বিল্ড চলাকালীন "FOO" চিহ্নটি সংজ্ঞায়িত করা হয়
  • [MethodImpl(...)] - সিঙ্ক্রোনাইজেশন, ইনলাইনিংয়ের মতো কয়েকটি জিনিস নির্দেশ করতে ব্যবহৃত
  • [PrincipalPermission(...)] - কোডটিতে স্বয়ংক্রিয়ভাবে সুরক্ষা চেক ইনজেকশনের জন্য ব্যবহৃত হয়
  • [TypeForwardedTo(...)]- কলকারীদের পুনর্নির্মাণ না করে সমাবেশগুলির মধ্যে প্রকারভেদ করতে ব্যবহৃত

প্রতিবিম্বের মাধ্যমে ম্যানুয়ালি পরীক্ষা করা জিনিসগুলির জন্য - আমি System.ComponentModelবৈশিষ্ট্যের একটি বড় অনুরাগী ; কিছু পছন্দ [TypeDescriptionProvider(...)], [TypeConverter(...)]এবং [Editor(...)]যা সম্পূর্ণরূপে ডেটা-বাঁধাই পরিস্থিতিতে (অর্থাত গতিশীল বৈশিষ্ট্য ইত্যাদি) ধরনের আচরণ পরিবর্তন করতে পারেন।


15

যদি আমি একটি কোড কভারেজ ক্রল করি তবে আমার ধারণা এই দুটি শীর্ষে থাকবে:

 [Serializable]
 [WebMethod]

15
[ওয়েবমেথড] একটি ওয়েব সেবায় প্রকাশিত কোনও পদ্ধতি সাজাতে ব্যবহৃত হয়। [সিরিয়ালাইজযোগ্য] আপনার অবজেক্টগুলিকে এমনভাবে চিহ্নিত করে যাতে এগুলি অ্যাপ্লিকেশন ডোমেনগুলি পেরিয়ে দেওয়ার মতো উদ্দেশ্যে সিরিয়ালাইজ করা যায়।
কেভ

15

আমি [DataObjectMethod]ইদানীং ব্যবহার করা হয় । এটি পদ্ধতিটি বর্ণনা করে যাতে আপনি আপনার ক্লাসটি অবজেক্টডেটা সোর্স (বা অন্যান্য নিয়ন্ত্রণ) দিয়ে ব্যবহার করতে পারেন।

[DataObjectMethod(DataObjectMethodType.Select)] 
[DataObjectMethod(DataObjectMethodType.Delete)] 
[DataObjectMethod(DataObjectMethodType.Update)] 
[DataObjectMethod(DataObjectMethodType.Insert)] 

অধিক তথ্য


12

আমাদের বর্তমান প্রকল্পে, আমরা ব্যবহার করি

[ComVisible(false)]

এটি স্বতন্ত্রভাবে পরিচালিত প্রকার বা সদস্য, বা কোনও সমাবেশের মধ্যে সমস্ত ধরণের, সিওএম এ অ্যাক্সেসযোগ্যতা নিয়ন্ত্রণ করে।

অধিক তথ্য


12
[TypeConverter(typeof(ExpandableObjectConverter))]

ডিজাইনারকে শ্রেণীবদ্ধ বৈশিষ্ট্যগুলি (আপনার নিয়ন্ত্রণের) প্রসারিত করতে বলে

[Obfuscation]

সমাবেশ, প্রকার, বা সদস্যের জন্য নির্দিষ্ট পদক্ষেপ গ্রহণের জন্য অবহেলা সরঞ্জামকে নির্দেশ দেয়। (যদিও আপনি সাধারণত সংসদীয় স্তর ব্যবহার করেন)[assembly:ObfuscateAssemblyAttribute(true)]


1
আমি অনুমান করেছি, কিন্তু ভুল ছিল। অবফেসেশন অ্যাট্রিবিউটটি তৃতীয় পক্ষের ওফসুকিটেটরের জন্য কেবল একটি ইঙ্গিত। এটি সংকলকটি ডিফল্টরূপে কোনও কিছুকে অস্পষ্ট করে না।
ড্যান ইজ ফিডলিং ফায়ারলাইট

ভিজুয়াল স্টুডিও প্রো / চূড়ান্ত ব্যবহারকারীদের জন্য @ ড্যানিই বিনামূল্যে!
ক্রিস এস

4
আপনি যদি ডটফাসকেটর সম্প্রদায় সংস্করণের কথা উল্লেখ করছেন তবে সুরক্ষা প্রদানের স্তরটি এত কম যে সর্বোত্তমভাবে এটি কোনও কিছুর জন্যই গণনা করে।
ড্যান ইজ ফিডলিং ফায়ারলাইট

@ricovox আমি একটি সংক্ষিপ্তসার যোগ করেছি
ক্রিস এস

9

আমি যে বৈশিষ্ট্যগুলি সবচেয়ে বেশি ব্যবহার করি তা হ'ল এক্সএমএল সিরিয়ালাইজেশন সম্পর্কিত।

XmlRoot

XmlElement

XmlAttribute

ইত্যাদি ...

যে কোনও দ্রুত এবং নোংরা এক্সএমএল পার্সিং বা সিরিয়ালাইজ করার সময় অত্যন্ত কার্যকর।


8

আমি মধ্যম স্তরের বিকাশকারী হতে পছন্দ করি

System.ComponentModel.EditorBrowsableAttribute আমাকে বৈশিষ্ট্যগুলি আড়াল করার অনুমতি দেয় যাতে ইউআই বিকাশকারী যে বৈশিষ্ট্যগুলি দেখার প্রয়োজন হয় না তাতে তারা অভিভূত হয় না।

System.ComponentModel.BindableAttributeকিছু জিনিসকে ডাটাবাউন্ড করার দরকার নেই। আবার, ইউআই বিকাশকারীদের যে কাজটি করা উচিত তা কম করুন।

DefaultValueলরেন্স জনস্টন যে উল্লেখ করেছেন তা আমিও পছন্দ করি ।

System.ComponentModel.BrowsableAttributeএবং Flagsনিয়মিত ব্যবহার করা হয়।

প্রয়োজনে আমি ব্যবহার করি System.STAThreadAttribute System.ThreadStaticAttribute

যাইহোক। আমি এই সমস্ত। নেট ফ্রেমওয়ার্ক বিকাশকারীদের জন্য ঠিক তত মূল্যবান।


8

[EditorBrowsable(EditorBrowsableState.Never)]প্রকল্পটি আপনার সমাধানে না থাকলে আপনাকে ইন্টেলিজেন্স থেকে বৈশিষ্ট্য এবং পদ্ধতিগুলি আড়াল করতে দেয়। অনর্গল ইন্টারফেসের জন্য অবৈধ প্রবাহ লুকানোর জন্য খুব সহায়ক। আপনি কতবার গেটহ্যাশকোড () বা সমান () করতে চান?

এমভিসি এর জন্য [ActionName("Name")]আপনাকে একই পদ্ধতির স্বাক্ষর সহ একটি ক্রিয়া এবং পোস্ট ক্রিয়নের অনুমতি দেয় বা অ্যাকশন নামে ড্যাশ ব্যবহার করতে দেয় যা অন্যথায় এর জন্য কোনও রুট তৈরি না করে সম্ভব নয়।


8

আমি এখানে উল্লেখ করা জরুরী মনে করি যে নিম্নলিখিত বৈশিষ্ট্যগুলিও খুব গুরুত্বপূর্ণ:

STAThreadAttribute 

ইঙ্গিত করে যে কোনও অ্যাপ্লিকেশনের জন্য সিওএম থ্রেডিং মডেলটি একক থ্রেডযুক্ত অ্যাপার্টমেন্ট (এসটিএ)।

উদাহরণস্বরূপ এই বৈশিষ্ট্যটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হয়:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }
}

এবং আরো ...

SuppressMessageAttribute

একটি একক কোড আর্টিক্টে একাধিক দমনকে মঞ্জুরি দিয়ে নির্দিষ্ট স্ট্যাটিক বিশ্লেষণ সরঞ্জাম বিধি লঙ্ঘনের প্রতিবেদনকে দমন করে।

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

[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "isChecked")]
[SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "fileIdentifier")]
static void FileNode(string name, bool isChecked)
{
    string fileIdentifier = name;
    string fileName = name;
    string version = String.Empty;
}

আপনার অ্যাপ্লিকেশনটি দুর্ঘটনাক্রমে অন্য কোনও সূচনাটি ঘটতে শুরু করা থেকে আটকাতে স্ট্যাথ্রেড ব্যবহার করা হয়?
আলোকিত

7

আমার মাথার উপরের দিক থেকে, এখানে একটি দ্রুত তালিকা রয়েছে, যা প্রায়শই ব্যবহারের ফ্রিকোয়েন্সি অনুসারে বাছাই করা পূর্বনির্ধারিত বৈশিষ্ট্যগুলির সাথে আমি একটি বড় প্রকল্পে ব্যবহার করি (~ 500k এলওসি):

ফ্ল্যাগস, সিরিয়ালাইজযোগ্য, ওয়েবমেথড, COMVisible, টাইপ কনভার্টার, শর্তসাপেক্ষ, থ্রেডস্ট্যাটিক, অপ্রচলিত, অভ্যন্তরীণ ভিজিবলটো, ডিবাগারস্টপ থ্রো।


2
থ্রেডস্ট্যাটিকের জন্য +1, অবাক করা কেউ এখনও অবধি এটি উল্লেখ করেনি, এবং পরিসংখ্যানিক পদ্ধতির জন্যও বলেছেন
staafl

6

আমি কোডস্মিথের মাধ্যমে ডেটা সত্তা শ্রেণি তৈরি করি এবং কিছু বৈধতা রুটিনের জন্য আমি বৈশিষ্ট্যগুলি ব্যবহার করি। এখানে একটি উদাহরণ:

/// <summary>
/// Firm ID
/// </summary>
[ChineseDescription("送样单位编号")]
[ValidRequired()]
public string FirmGUID
{
    get { return _firmGUID; }
    set { _firmGUID = value; }
}

এবং ডেটা সত্তা শ্রেণীর সাথে সংযুক্ত বৈশিষ্ট্যের উপর ভিত্তি করে বৈধকরণের জন্য আমি একটি ইউটিলিটি ক্লাস পেয়েছি। কোডটি এখানে:

namespace Reform.Water.Business.Common
{
/// <summary>
/// Validation Utility
/// </summary>
public static class ValidationUtility
{
    /// <summary>
    /// Data entity validation
    /// </summary>
    /// <param name="data">Data entity object</param>
    /// <returns>return true if the object is valid, otherwise return false</returns>
    public static bool Validate(object data)
    {
        bool result = true;
        PropertyInfo[] properties = data.GetType().GetProperties();
        foreach (PropertyInfo p in properties)
        {
            //Length validatioin
            Attribute attribute = Attribute.GetCustomAttribute(p,typeof(ValidLengthAttribute), false);
            if (attribute != null)
            {
                ValidLengthAttribute validLengthAttribute = attribute as ValidLengthAttribute;
                if (validLengthAttribute != null)
                {
                    int maxLength = validLengthAttribute.MaxLength;
                    int minLength = validLengthAttribute.MinLength;
                    string stringValue = p.GetValue(data, null).ToString();
                    if (stringValue.Length < minLength || stringValue.Length > maxLength)
                    {
                        return false;
                    }
                }
            }
            //Range validation
            attribute = Attribute.GetCustomAttribute(p,typeof(ValidRangeAttribute), false);
            if (attribute != null)
            {
                ValidRangeAttribute validRangeAttribute = attribute as ValidRangeAttribute;
                if (validRangeAttribute != null)
                {
                    decimal maxValue = decimal.MaxValue;
                    decimal minValue = decimal.MinValue;
                    decimal.TryParse(validRangeAttribute.MaxValueString, out maxValue);
                    decimal.TryParse(validRangeAttribute.MinValueString, out minValue);
                    decimal decimalValue = 0;
                    decimal.TryParse(p.GetValue(data, null).ToString(), out decimalValue);
                    if (decimalValue < minValue || decimalValue > maxValue)
                    {
                        return false;
                    }
                }
            }
            //Regex validation
            attribute = Attribute.GetCustomAttribute(p,typeof(ValidRegExAttribute), false);
            if (attribute != null)
            {
                ValidRegExAttribute validRegExAttribute = attribute as ValidRegExAttribute;
                if (validRegExAttribute != null)
                {
                    string objectStringValue = p.GetValue(data, null).ToString();
                    string regExString = validRegExAttribute.RegExString;
                    Regex regEx = new Regex(regExString);
                    if (regEx.Match(objectStringValue) == null)
                    {
                        return false;
                    }
                }
            }
            //Required field validation
            attribute = Attribute.GetCustomAttribute(p,typeof(ValidRequiredAttribute), false);
            if (attribute != null)
            {
                ValidRequiredAttribute validRequiredAttribute = attribute as ValidRequiredAttribute;
                if (validRequiredAttribute != null)
                {
                    object requiredPropertyValue = p.GetValue(data, null);
                    if (requiredPropertyValue == null || string.IsNullOrEmpty(requiredPropertyValue.ToString()))
                    {
                        return false;
                    }
                }
            }
        }
        return result;
    }
}
}

6

[DeploymentItem("myFile1.txt")] এমএসডিএন ডক ডিপ্লোয়মেন্টআইটেমে

আপনি যদি কোনও ফাইলের বিরুদ্ধে পরীক্ষা করছেন বা ফাইলটিকে আপনার পরীক্ষার ইনপুট হিসাবে ব্যবহার করছেন তবে এটি সত্যিই কার্যকর।


5

[System.Security.Permissions.PermissionSetAttribute] কোনও অনুমতিপত্রের জন্য সুরক্ষা ক্রিয়াকলাপগুলি ঘোষণামূলক সুরক্ষা ব্যবহার করে কোডে প্রয়োগ করা যায়।

// usage:
public class FullConditionUITypeEditor : UITypeEditor
{
    // The immediate caller is required to have been granted the FullTrust permission.
    [PermissionSetAttribute(SecurityAction.LinkDemand, Name = "FullTrust")]
    public FullConditionUITypeEditor() { }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.