সি # [বন্ধ] এ ইন্টারফেস এবং বাস্তবায়ন মন্তব্যগুলিকে সিঙ্ক্রোনাইজ করার উপায়


98

কোনও ইন্টারফেস এবং এর বাস্তবায়নের মধ্যে মন্তব্যগুলি সিঙ্ক করার জন্য কী স্বয়ংক্রিয় উপায় রয়েছে? আমি বর্তমানে তাদের উভয়কেই নথি করছি এবং ম্যানুয়ালি সিঙ্কে রাখতে চাই না।

হালনাগাদ:

এই কোডটি বিবেচনা করুন:

interface IFoo{
    /// <summary>
    /// Commenting DoThis method
    /// </summary>
    void DoThis();
}
class Foo : IFoo {
    public void DoThis();
}

যখন আমি এই জাতীয় ক্লাস তৈরি করি:

IFoo foo=new Foo();
foo.DoThis();//comments are shown in intellisense

এখানে মন্তব্যগুলি প্রদর্শিত হয় না:

Foo foo=new Foo();
foo.DoThis();//comments are not shown in intellisense

<inheritDoc/>ট্যাগ পুরোপুরি বালি দুর্গ মধ্যে ডকুমেন্টেশন উৎপন্ন হবে, কিন্তু এটি intellisense টুলটিপ্সে কাজ করে না।

আপনার ধারণা শেয়ার করুন।

ধন্যবাদ


এই বৈশিষ্ট্য প্রয়োগ করা হয়েছে? ভিজ্যুষ্টুডিও.ইউসারওয়্যস
१२১79

যদি ইন্টারফেসের জন্য ডকুমেন্টেশন উপলব্ধ থাকে তবে প্রয়োগের জন্য <এনরিটেড ডক /> ডকুমেন্টেশন ট্যাগ তৈরি করতে আমি কীভাবে Atomineer প্রো তৈরি করতে পারি?
Hellboy

4
আপনি ঠিক <inheritdoc/>ভিজ্যুয়াল স্টুডিওতে নষ্ট হয়ে গেছেন। দয়া করে ভিজ্যুয়াল স্টুডিও.ইউসারওয়্যস // ফোরামস
কর্নেল আতঙ্ক

উত্তর:


62

আপনি মাইক্রোসফ্ট স্যান্ডক্যাসল (বা এনডোক) inheritdocট্যাগ ব্যবহার করে এটি বেশ সহজেই করতে পারেন । এটি আনুষ্ঠানিকভাবে স্পেসিফিকেশন দ্বারা সমর্থিত নয়, তবে কাস্টম ট্যাগগুলি পুরোপুরি গ্রহণযোগ্য, এবং মাইক্রোসফ্ট স্যান্ডক্যাসল তৈরি করার সময় এনডোক থেকে এই (এবং এক বা দুটি অন্যান্য ট্যাগ) অনুলিপি করতে বেছে নিয়েছিল।

/// <inheritdoc/>
/// <remarks>
/// You can still specify all the normal XML tags here, and they will
/// overwrite inherited ones accordingly.
/// </remarks>
public void MethodImplementingInterfaceMethod(string foo, int bar)
{
    //
}

এখানে স্যান্ডক্যাসল সহায়তা ফাইল নির্মাতা জিইউআইয়ের সহায়তা পৃষ্ঠাটি দেওয়া হয়েছে, যা এর ব্যবহারের পুরোপুরি বর্ণনা করে।

(অবশ্যই, এটি সুনির্দিষ্টভাবে "সিঙ্ক্রোনাইজেশন" নয়, যেমন আপনার প্রশ্নের উল্লেখ রয়েছে, তবে এটি আপনি ঠিক যা খুঁজছেন তা মনে হবে to)

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

সম্পাদনা: আপনার আপডেট সম্পর্কিত, স্যান্ডক্যাসলও আপনার যত্ন নিতে পারে। স্যান্ডক্যাসল প্রকৃত এক্সএমএল ফাইলের একটি পরিবর্তিত সংস্করণ আউটপুট করতে পারে যা এটি ইনপুটটির জন্য ব্যবহার করে, যার অর্থ আপনি এই লাইব্রেরি ডিএলএল পাশাপাশি ভিজ্যুয়াল স্টুডিওর দ্বারা নির্মিত তার পরিবর্তে আপনার পরিবর্তিত সংস্করণটি বিতরণ করতে পারবেন , যার অর্থ আপনার বুদ্ধিমানের পাশাপাশি মন্তব্য রয়েছে ডকুমেন্টেশন ফাইল (সিএইচএম, যাই হোক না কেন)।


আরে, বেশ সুন্দর! আমি স্যান্ডক্যাসল পছন্দ করি!
টর হগেন

আপডেট করা প্রশ্নের উত্তর দিতে সম্পাদিত পোস্ট।
নলডোরিন

4
এটি কি কোনও শ্রেণির স্তরে করা যায়? যাতে আমাকে প্রতিটি পদ্ধতির আগে /// <উত্তেজনাপূর্ণ /> লাগাতে না হয়।
অ্যান্টনি স্কট

4
একটি জিনিস আমি লক্ষ্য করেছি যে <inheritdoc/> তা <param>ট্যাগের জন্য দস্তাবেজের উত্তরাধিকারী হয় না ।
স্টিফেন

4
এই ব্যবহারকারী ভয়েস বৈশিষ্ট্যটি <ওয়ারেন্টডোক /> আনুষ্ঠানিকভাবে সি # স্পিকে যুক্ত করতে এবং ভিএস ইন্টিলিজেন্স ভিজ্যুয়াল
9:56

14

আপনি যদি ইতিমধ্যে এটি ব্যবহার না করে থাকেন তবে আমি দৃ strongly়তার সাথে ঘোস্টডক নামে একটি বিনামূল্যে ভিজ্যুয়াল স্টুডিও অ্যাডোনার প্রস্তাব দিই । এটি ডকুমেন্টেশন প্রক্রিয়াটি সহজ করে দেয়। কিছুটা সম্পর্কিত প্রশ্নে আমার মন্তব্যটি দেখুন ।

যদিও ঘোস্টডক স্বয়ংক্রিয়ভাবে সিঙ্ক্রোনাইজেশন তৈরি করবে না, এটি আপনাকে নিম্নলিখিত পরিস্থিতিতে আপনাকে সহায়তা করতে পারে:

আপনার কাছে একটি ডকুমেন্টেড ইন্টারফেস পদ্ধতি রয়েছে। এই ইন্টারফেসটি একটি শ্রেণিতে প্রয়োগ করুন, ঘোস্টডক শর্টকাট কী টিপুন Ctrl-Shift-D, এবং ইন্টারফেস থেকে এক্সএমএল মন্তব্য প্রয়োগ করা পদ্ধতিতে যুক্ত করা হবে।

বিকল্পগুলি -> কীবোর্ড সেটিংসে যান এবং GhostDoc.AddIn.RebuildDocumentation(আমি ব্যবহার করেছি Ctrl-Shift-Alt-D) এর জন্য একটি কী বরাদ্দ করুন । বিকল্প পাঠ

এখন, আপনি যদি ইন্টারফেসে এক্সএমএল মন্তব্য পরিবর্তন করেন তবে প্রয়োগ করা পদ্ধতিতে কেবল এই শর্টকাট কী টিপুন, এবং ডকুমেন্টেশন আপডেট করা হবে। দুর্ভাগ্যক্রমে, এটি তদ্বিপরীত কাজ করে না।


ঘোস্টডকের নতুন সংস্করণ (5.3.16270) উত্তরাধিকার সূত্রে প্রাপ্ত নথিও তৈরি করতে পারে। আমি আমার ইন্টারফেস বাস্তবায়নের জন্য এটি চেষ্টা করেছি। ভাল বোনাস, এটি নিক্ষিপ্ত ব্যতিক্রম বার্তার সাথে ব্যতিক্রমগুলি যুক্ত করেছে :-)
ক্রিস্টোফ

6

আমি সাধারণত এ জাতীয় মন্তব্য লিখি:

/// <summary>
/// Implements <see cref="IMyInterface.Foo(string, int)"/>
/// </summary>
/// <returns></returns>

পদ্ধতিগুলি কেবল ইন্টারফেসের সাহায্যে ব্যবহৃত হয়, তাই কোডিং করার সময় এই মন্তব্যটি সরঞ্জামদণ্ডেও প্রদর্শিত হয় না।

সম্পাদনা করুন:

আপনি যখন ক্লাসটি সরাসরি কল করে এবং ইন্টারফেসটি ব্যবহার না করে ডক্স দেখতে চান , আপনার দুবার এটি লিখতে হবে বা ঘোস্টডকের মতো একটি সরঞ্জাম ব্যবহার করা উচিত।


4

ঘোস্টডোক চেষ্টা করুন ! এটা আমার জন্য কাজ করে :-)

সম্পাদনা: এখন যেহেতু আমাকে স্যান্ডক্যাসলের সমর্থন সম্পর্কে সচেতন করা হয়েছে <inheritdoc/>, আমি নলডোরিনের পোস্টটিকে সমর্থন করি। এটি অনেক ভাল সমাধান। যদিও আমি এখনও সাধারণ ভিত্তিতে ঘোস্টডকের সুপারিশ করি।


6
ব্যক্তিগতভাবে আমি ঘোস্টডক পছন্দ করি না। এটি ডকুমেন্টেশন তৈরি করে যেখানে আসলে কিছুই নেই। এটি কিছু নথিভুক্ত নয় এই বিষয়টি গোপন করছে। কেবল একটি ব্যক্তিগত মতামত, আমি বলি না যে এটি সাধারণভাবে কিছু খারাপ।
স্টিফান স্টেইনগার

4
স্টেফানের মন্তব্যটির সাথে একমত যে ঘোস্টডক নিখুঁত নয়, তবে এটি স্বয়ংক্রিয়ভাবে "উত্তরাধিকারসূত্রে" মন্তব্যগুলি এনে দেয় যাতে এটি প্রশ্নের উত্তম উত্তম উত্তর।
স্টিভ

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

2

আমার আরও ভাল উত্তর আছে: ফাইএক্সএমএল, আমি এর অন্যতম লেখক

ক্লোনিং অবশ্যই কার্যকরী পদ্ধতির, তবে এর উল্লেখযোগ্য অসুবিধাগুলি রয়েছে, যেমন:

  • যখন মূল মন্তব্যটি পরিবর্তন করা হয় (যা বিকাশের সময় ঘন ঘন ঘটে) তখন এর ক্লোনটি হয় না।
  • আপনি বিপুল পরিমাণ নকল তৈরি করছেন। যদি আপনি কোনও উত্স কোড বিশ্লেষণ সরঞ্জামগুলি ব্যবহার করেন (যেমন টিম সিটিতে সদৃশ ফাইন্ডার), এটি প্রধানত আপনার মন্তব্যগুলি খুঁজে পাবেন।

যেমনটি উল্লেখ করা হয়েছিল, স্যান্ডক্যাসলে<inheritdoc> ট্যাগ রয়েছে তবে ফাইএক্সএমএল এর তুলনায় এর কয়েকটি অসুবিধা রয়েছে:

  • স্যান্ডক্যাসল সংকলিত এইচটিএমএল সহায়তা ফাইল তৈরি করে - সাধারণত এটি .xmlএক্সট্রাক্ট এক্সএমএল মন্তব্যযুক্ত ফাইলগুলিকে সংশোধন করে না (শেষ পর্যন্ত, সংকলনের সময় এটি "ফ্লাইতে" করা যায় না)।
  • স্যান্ডক্যাসলের বাস্তবায়ন কম শক্তিশালী। যেমন না হয় <see ... copy="true" />

আরও তথ্যের জন্য স্যান্ডক্যাসলের <inheritdoc>বর্ণনা দেখুন ।

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

  • বেস ক্লাস বা ইন্টারফেস থেকে ডকুমেন্টেশন উত্তরাধিকারী জন্য কোন সমর্থন। অর্থ্যাৎ যে কোনও ওভাররাইড হওয়া সদস্যের জন্য একটি ডকুমেন্টেশন স্ক্র্যাচ থেকে লেখা উচিত, যদিও সাধারণত এটির কমপক্ষে অংশটি উত্তরাধিকারী হওয়া যথেষ্ট কাম্য।
  • সাধারণত ব্যবহৃত ডকুমেন্টেশন টেমপ্লেটগুলি সন্নিবেশ করার জন্য কোনও সমর্থন নেই , যেমন "এই ধরণটি সিঙ্গলটন - <see cref="Instance" />এর একমাত্র উদাহরণ পেতে এর সম্পত্তিটি ব্যবহার করুন ।", এমনকি " <CurrentType>শ্রেণীর কোনও নতুন উদাহরণ সূচনা করে ।"

উল্লিখিত সমস্যাগুলি সমাধান করতে, নিম্নলিখিত অতিরিক্ত এক্সএমএল ট্যাগ সরবরাহ করা হয়েছে:

  • <inheritdoc />, <inherited /> ট্যাগ
  • <see cref="..." copy="..." /><see/>ট্যাগ বৈশিষ্ট্য ।

এখানে তার ওয়েবপৃষ্ঠাটি এবং ডাউনলোড পাতা



1

<উত্তরাধিকারী /> ট্যাগটির জন্য সমর্থন যোগ করার জন্য এক্সএমএল ডকুমেন্টেশন ফাইলগুলি পোস্ট-প্রক্রিয়া করার জন্য আমি একটি লাইব্রেরি তৈরি করেছি।

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

Www.inheritdoc.io এ আরও তথ্য (বিনামূল্যে সংস্করণ উপলব্ধ)।


0

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


4
আমি যদি পরীক্ষাগুলিতে এটি ফেক না করতাম তবে আমি এখানে ইন্টারফেসটি ব্যবহার করতাম না।
ভ্যালেন্টিন ভাসিলিভ

0

রিশার্পারের সাহায্যে আপনি এটি অনুলিপি করতে পারেন তবে আমি মনে করি না যে এটি সর্বদা সিঙ্ক হয় in

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