সি # এর জন্য মন্তব্য উত্তরাধিকার (আসলে কোনও ভাষা)


95

ধরুন আমার এই ইন্টারফেসটি আছে

public interface IFoo
{
    ///<summary>
    /// Foo method
    ///</summary>
    void Foo();

    ///<summary>
    /// Bar method
    ///</summary>
    void Bar();

    ///<summary>
    /// Situation normal
    ///</summary>
    void Snafu();
}

এবং এই ক্লাস

public class Foo : IFoo
{
    public void Foo() { ... }
    public void Bar() { ... }
    public void Snafu() { ... }
}

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

কারণ আমি প্রতিটি উত্পন্ন উপ-শ্রেণীর জন্য একই মন্তব্যগুলি পুনরায় লেখার ঘৃণা করি!


14
আমি কেবল এটিকে ঘৃণা করি না তবে এগুলি সমন্বয় করে রাখাও কঠিন।
অলিভিয়ার জ্যাকট-ডেসকোম্বেস

উত্তর:


17

ঘোস্টডক ঠিক তা করে। উত্তরাধিকার সূত্রে প্রাপ্ত নয় এমন পদ্ধতিগুলির জন্য, এটি নামটি থেকে একটি বিবরণ তৈরি করার চেষ্টা করে।

FlingThing() হয়ে যায় "Flings the Thing"


4
ঘোস্টডক দুর্দান্ত, এর মধ্যে একটি জিনিস যা আমি জানতাম না যে আমার প্রয়োজন ছিল কিন্তু এখন ছাড়া এটি করতে পারি না: ও)
নিকোলাইড্যান্ট

184
স্বয়ংক্রিয়ভাবে উত্পন্ন ডক্স আমার কাছে খুব খারাপ ধারণা বলে মনে হচ্ছে। তারা কোনও দরকারী তথ্য যুক্ত করে না কেবল অকারণে কোডটি ফুটিয়ে তোলে। কোনও সরঞ্জাম যদি বুঝতে পারে যে কোনও পদ্ধতি তার নাম থেকে কী করে, তার চেয়ে একজন ব্যক্তি বুঝতে পারে এবং কোনও ডক প্রয়োজন হয় না।
লেন্সফ্লেরে

8
@ লেন্সফ্লেয়ার এটি সত্য। আমাকে একবার এমন একটি কাঠামো ব্যবহার করতে হয়েছিল যা কেবলমাত্র এ জাতীয় উত্পন্ন মন্তব্য ছিল, যা পদ্ধতি / শ্রেণিতে কোনও তথ্য যোগ করে না। "এই পদ্ধতিটি এটি করে এবং" এর পরিবর্তে "এই পদ্ধতিটি ক্লাস জেডের XY" এর মত মন্তব্য। xD এছাড়াও আপনি কোডটি ব্রাউজ করেননি, সুতরাং এটি পরীক্ষার এবং ত্রুটিতে নেমে গেছে। কখনও না! :-)
itmuckel

15
@Lensflare যতদূর আমি 100% আপনার সাথে একমত AGDs উপর নির্ভর যেমন হিসাবে , আমি বাতলান উচিত যে AGDs হিসাবে ব্যবহার করা যেতে বোঝানো হয় না যে মত যাদু বোতাম "এটা সব করতে"। পরিবর্তে, এগুলি বোঝা যাচ্ছে যে আপনি নিজের লিখতে হবে বয়লারপ্লেটের পরিমাণ, পুনরাবৃত্তিমূলক ডকুমেন্টেশনগুলি হ্রাস করতে টেমপ্লেট-জেনারেটর হিসাবে ব্যবহৃত হবে, যাতে আপনি গুরুত্বপূর্ণ জিনিসগুলিতে ফোকাস করতে পারেন। --- উদাহরণস্বরূপ, এটি তৈরি করতে পারেন <summary>, <param>, <returns>, <throws>, etc...আপনার জন্য বিভাগে। অনেক সময় ভাল পর্যাপ্ত ফলাফল সহ; অন্যান্য সময় সংশোধন বা প্রসারণ প্রয়োজন, কিন্তু এখনও সামগ্রিক প্রচেষ্টা হ্রাস।
XenoRo

4
লোকেরা ডকুমেন্টেশনগুলি ডেভেলপারদের জন্য নয় এটি আর্কিটেক্টদের জন্য যাতে তাদের বাটগুলি সমস্ত আচ্ছাদিত থাকে: "আরে, আমরা কি আপনার প্রকল্পের কোড ডকুমেন্টেশন পড়তে পারি? অবশ্যই, এটি এখানে।"
ত্রিশূল ডি গাও

157

আপনি সর্বদা <inheritdoc />ট্যাগটি ব্যবহার করতে পারেন :

public class Foo : IFoo
{
    /// <inheritdoc />
    public void Foo() { ... }
    /// <inheritdoc />
    public void Bar() { ... }
    /// <inheritdoc />
    public void Snafu() { ... }
}

crefবৈশিষ্ট্যটি ব্যবহার করে , আপনি এমনকি সম্পূর্ণ ভিন্ন শ্রেণি বা নেমস্পেসে সম্পূর্ণ ভিন্ন সদস্যকে উল্লেখ করতে পারেন!

public class Foo
{
    /// <inheritdoc cref="System.String.IndexOf" />
    public void Bar() { ... } // this method will now have the documentation of System.String.IndexOf
}

8
আমি <ওয়ারেনডোক /> এমনকি অস্তিত্ব জানতাম না ... তবে যতদূর আমি দেখতে পাচ্ছি, এই পদ্ধতির মন্তব্যটি ইন্টেলিজেন্স দিয়ে দেখায় না।
Gerleim

12
@ জারলেম এক বছর আগে জেফ হিটনের উত্তর এবং এর নীচে মন্তব্যটি দেখুন। স্যান্ডক্যাসলে <ওয়ারেনডোক /> রয়েছে, সি # নয়।
আরবিহাইটেকার

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

9
Resharper 2017,2 inheritdoc জন্য উন্নত সমর্থন আছে jetbrains.com/resharper/whatsnew
ডেভ ইভান্স

4
ভিজ্যুয়াল স্টুডিও এন্টারপ্রাইজ 2017 (সংস্করণ 15.9.3) আমার জন্য উত্তরাধিকারসূত্রে দেওয়া মন্তব্য দেখায় না।
হার্জব्यूब

26

/// <inheritdoc/>উত্তরাধিকার চাইলে ব্যবহার করুন । ঘোস্টডক বা এ জাতীয় কিছু এড়িয়ে চলুন।

আমি সম্মত হই যে এটি বিরক্তিকর যে মন্তব্যগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয় না। কারও হাতে সময় থাকলে (আমি ইচ্ছা করতাম) তৈরি করা মোটামুটি সহজ অ্যাড-ইন হবে।

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

ঘোস্টডক ভাল শুরু এবং মন্তব্যগুলি লেখার প্রক্রিয়াটিকে আরও সহজ করে তুলেছে। বিশেষত মন্তব্যগুলি আপ টু ডেট রাখার জন্য দরকারী যখন আপনি প্যারামিটারগুলি যুক্ত / সরান, ঘোস্টডক পুনরায় চালিত করুন এবং এটি বিবরণটি আপডেট করবে।


আমি বিভ্রান্ত - আপনি ঘোস্টডক এড়ানোর জন্য বলেছিলেন, তবে শেষ পর্যন্ত আপনি গোস্টডককে জিনিসগুলি আরও সহজ করতে সাহায্য করার পক্ষে সমর্থন করেছেন ming আপনি কি বলতে চাইছেন তা স্পষ্ট করে বলতে পারেন?
মাইক মেরিনোভস্কি

ধন্যবাদ @ মাইকম্যারিনোস্কি। এটি পুরানো পরামর্শ। আমি মনে করি যে আমি অন্য সময়ে যে জেনারেটরের মতো ঘোস্টডকও মন্তব্য যুক্ত করব তবে প্রায় অকেজো বিবরণ সহ উদাহরণস্বরূপ বলতে চেয়েছিলাম <param name="origin">The origin.</param>। আরও উদাহরণের জন্য ঘোস্টডক সবচেয়ে খারাপ জিনিস বলে দেখুন See Xmldocs এর জন্য ভিজ্যুয়াল স্টুডিওতে এখন আরও ভাল আবরণ এবং জেনারেটর রয়েছে যখন প্যারামিটারগুলি + ডকগুলি অ্যালাইন করে না তাই ঘোস্টডক (বা অন্যান্য সরঞ্জাম) আর প্রয়োজন হয় না you
ডেনিস

15

জাভাতে এটি আছে এবং আমি এটি সর্বদা ব্যবহার করি। শুধু কর:

/**
 * {@inheritDoc}
 */

এবং জাভাডোক সরঞ্জামটি এটিকে চিত্রিত করে।

সি # এর সমান চিহ্ন রয়েছে:

<inheritDoc/>

আপনি এখানে আরও পড়তে পারেন:

http://www.ewoodruff.us/shfbdocs/html/79897974-ffc9-4b84-91a5-e50c66a0221d.htm


37
সি # এর <inheritdoc/>চিহ্নিতকারী নেই: স্যান্ডক্যাসেল এটি রয়েছে। shfb.codeplex.com
এরিক

8
সিএনএতে # উত্তরাধিকারী /> যুক্ত করার জন্য একটি ব্যবহারকারী ভয়েস বৈশিষ্ট্য অনুরোধ রয়েছে। ভিজ্যুয়ালস্টুডিও.ইউসারওয়্যস
//

4
সি # বা জাভা (বা অন্য কোনও প্রোগ্রামিং ভাষা) এর কোনওটিতেই "এক্সএমএল ডক" উপাদান নেই। এগুলি মন্তব্য । সংকলকরা তাদের সম্পর্কে nothng জানেন। এগুলি সমস্ত তৃতীয় পক্ষের ডকুমেন্টেশন জেনারেটর দ্বারা কঠোরভাবে ব্যবহৃত হয়, তা সে জাভাদোক বা স্যান্ডক্যাসল বা যাই হোক না কেন।
জেমস করান

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

4
ভিজ্যুয়াল স্টুডিওর সংস্করণ ১.4.৪.০ এবং আরও নতুন <এনরিটেডক /> এর জন্য ইন্টেলিজেন্স সরবরাহ করে! ডকস.মাইক্রোসফট.ইন- ইউএস
ভিসুয়ালস্টুডিও /

11

আমি সরাসরি ব্যবহার করতে বলব

/// <inheritdoc cref="YourClass.YourMethod"/>  --> For methods inheritance

এবং

/// <inheritdoc cref="YourClass"/>  --> For directly class inheritance

আপনাকে এই মন্তব্যগুলি আপনার শ্রেণী / পদ্ধতির ঠিক আগের লাইনে রাখতে হবে

আপনি যেমন নথিবদ্ধ করেছেন এমন একটি ইন্টারফেস থেকে উদাহরণস্বরূপ আপনার মন্তব্যগুলির তথ্য পাবেন:

    /// <summary>
    /// This method is awesome!
    /// </summary>
    /// <param name="awesomeParam">The awesome parameter of the month!.</param>
    /// <returns>A <see cref="AwesomeObject"/> that is also awesome...</returns>
    AwesomeObject CreateAwesome(WhateverObject awesomeParam);

পরামর্শের জন্য ধন্যবাদ! এই পদ্ধতিটি আরও সুস্পষ্ট এবং বস্তু শ্রেণীর (এমনকি ইন্টারফেস প্রয়োগ করার সময়ও) উত্তরাধিকার শ্রেণির বিবরণের সমস্যা সমাধান করে।
ডেনিস বাবারকিন

8

রিশার্পারের কাছে বেস ক্লাস বা ইন্টারফেস থেকে মন্তব্যগুলি অনুলিপি করার বিকল্প রয়েছে।


4
উহু? কীভাবে? আমি রিশার্পার ব্যবহার করি এবং কোনও ইন্টারফেস বাস্তবায়ন বা উত্তরাধিকার সূত্রে আমি কখনই সেই বিকল্পটি দেখিনি ... এটি কোথায় এবং আপনি কীভাবে এই বিকল্পটি ব্যবহার করবেন?
জাজিমভ

4
@ জাজিমভ আপনি যখন ওভাররাইড পদ্ধতিটি প্রবিষ্ট করেন তখন "বেস থেকে ডকুমেন্টেশন কপি করার" বিকল্প থাকে option
সোভিক

8

আর একটি উপায় হল <see />এক্সএমএল ডকুমেন্টেশন ট্যাগ ব্যবহার করা । এটি কিছু অতিরিক্ত প্রচেষ্টা কিন্তু বাক্সের বাইরে কাজ করে ...

এখানে কিছু উদাহরন:

/// <summary>
/// Implementation of <see cref="IFoo"/>.
/// </summary>
public class Foo : IFoo
{
    /// <summary>
    /// See <see cref="IFoo"/>.
    /// </summary>
    public void Foo() { ... }

    /// <summary>
    /// See <see cref="IFoo.Bar"/>
    /// </summary>
    public void Bar() { ... }

    /// <summary>
    /// This implementation of <see cref="IFoo.Snafu"/> uses the a caching algorithm for performance optimization.
    /// </summary>
    public void Snafu() { ... }
}

হালনাগাদ:

আমি এখন ব্যবহার করতে পছন্দ করি /// <inheritdoc/>যা এখন রিসার্পার দ্বারা সমর্থিত।


1

আমি এক্সএমএল ডকুমেন্টেশন ফাইলগুলিতে <inheritdoc/>ট্যাগ প্রতিস্থাপনের জন্য সমর্থন যোগ করার জন্য এক্সএমএল ডকুমেন্টেশন ফাইলগুলি পোস্ট-প্রক্রিয়া করার জন্য একটি সরঞ্জাম তৈরি শেষ করেছি । Www.inheritdoc.io এ উপলব্ধ (বিনামূল্যে সংস্করণ উপলব্ধ)।


0

ঠিক আছে, এক ধরণের দেশীয় সমাধান রয়েছে, আমি। নেট কোর ২.২ খুঁজে পেয়েছি

<include>ট্যাগটি ব্যবহার করার জন্য ধারণা ।

আপনি <GenerateDocumentationFile>true</GenerateDocumentationFile>আপনার .csprojফাইল যুক্ত করতে পারেন ।

আপনার একটি ইন্টারফেস থাকতে পারে:

namespace YourNamespace
{
    /// <summary>
    /// Represents interface for a type.
    /// </summary>
    public interface IType
    {
        /// <summary>
        /// Executes an action in read access mode.
        /// </summary>
        void ExecuteAction();
    }
}

এবং এটি থেকে উত্তরাধিকারসূত্রে প্রাপ্ত কিছু:

using System;

namespace YourNamespace
{
    /// <summary>
    /// A type inherited from <see cref="IType"/> interface.
    /// </summary>
    public class InheritedType : IType
    {
        /// <include file='bin\Release\netstandard2.0\YourNamespace.xml' path='doc/members/member[@name="M:YourNamespace.IType.ExecuteAction()"]/*'/>
        public void ExecuteAction() => Console.WriteLine("Action is executed.");
    }
}

ঠিক আছে, এটি কিছুটা ভীতিজনক তবে এটি প্রত্যাশিত উপাদানগুলিকে যুক্ত করে YourNamespace.xml

আপনি যদি Debugকনফিগারেশনটি তৈরি করেন তবে এর বৈশিষ্ট্যের Releaseজন্য Debugআপনি অদলবদল করতে পারেনfileinclude ট্যাগ।

একটি সঠিক খুঁজতে member's nameখুলুন উত্পন্ন রেফারেন্স Documentation.xmlফাইল।

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

উজ্জ্বল দিকটি হ'ল ভিজ্যুয়াল স্টুডিও অনুলিপি করা উপাদানগুলিকে বৈধতা দেয়, সুতরাং ডকুমেন্টেশন এবং কোডটি ইন্টারফেস / বেস শ্রেণি ইত্যাদির সাথে সমন্বয় করা খুব সহজ example

আমার প্রকল্পে, আমি উভয় <inheritdoc/>(ডকুএফএক্সের জন্য) এবং <include/>( নিউগেট প্যাকেজ প্রকাশের জন্য এবং ভিজুয়াল স্টুডিওতে বৈধতার জন্য) শেষ করেছি:

        /// <inheritdoc />
        /// <include file='bin\Release\netstandard2.0\Platform.Threading.xml' path='doc/members/member[@name="M:Platform.Threading.Synchronization.ISynchronization.ExecuteReadOperation(System.Action)"]/*'/>
        public void ExecuteReadOperation(Action action) => action();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.