এক্সএমএল ডকুমেন্টেশনে জেনেরিক ক্লাস এবং পদ্ধতিগুলি কীভাবে উল্লেখ করা যায়


198

এক্সএমএল ডকুমেন্টেশন লেখার সময় আপনি ব্যবহার করতে পারেন <see cref="something">something</see>, যা অবশ্যই কাজ করে। তবে আপনি কীভাবে জেনেরিক ধরণের সাথে কোনও শ্রেণি বা কোনও পদ্ধতি উল্লেখ করেন?

public class FancyClass<T>
{
  public string FancyMethod<K>(T value) { return "something fancy"; }
}

আমি যদি কোথাও এক্সএমএল ডকুমেন্টেশন লিখতে যাচ্ছিলাম, আমি কীভাবে অভিনব ক্লাসটি উল্লেখ করব? আমি কিভাবে রেফারেন্স করতে পারি FancyClass<string>? পদ্ধতি সম্পর্কে কি?

উদাহরণস্বরূপ, অন্য কোনও ক্লাসে আমি ব্যবহারকারীকে জানাতে চেয়েছিলাম যে আমি একটি উদাহরণ ফিরিয়ে দেব FancyClass<int>। আমি কীভাবে এর জন্য ক্র ক্রফ জিনিসটি তৈরি করতে পারি?

উত্তর:


257

পদ্ধতিটি উল্লেখ করতে:

/// <see cref="FancyClass{T}.FancyMethod{K}(T)"/> for more information.

3
এই উত্তরের জন্য ধন্যবাদ! এটা আসলে উপর দুটিই MSDN এর পাতা থেকে অনুপস্থিত <দেখতে>: msdn.microsoft.com/en-us/library/acd0tfbe.aspx
joce

6
VS2010 টুলটিপগুলিতে এটি কাজ করার জন্য আমি আসলে বিশ্বাস করি আপনাকে জেনেরিক যুক্তিগুলির সংখ্যা বোঝাতে হবে, যেমন "ফ্যানসি ক্লাস 1{T}.FancyMethod1 {কে} (টি)"
স্টিফেন ড্রু

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

@ লাস, নীচে নীচে স্টিভ এর উত্তর এবং মন্তব্য দেখুন। আপনার উত্তর সঠিক Intellisense সরঞ্জামদণ্ড কভার করে না।
জাকুব জানুসজকিউইজ

43
/// <summary>Uses a <see cref="FancyClass{T}" /> instance.</summary>

বিটিডাব্লু, এটি। নেট ফ্রেমওয়ার্ক 2.0 এবং 3.0 এর এমএসডিএন ডকুমেন্টেশনে উপস্থিত ছিল , তবে এটি 3.5 সংস্করণে অদৃশ্য হয়ে গেছে


4
টি এর একটি চমত্কার উদাহরণ সম্পর্কে কি? স্ট্রিং মত? সম্ভব না?
Svish

আপনি কি বোঝাতে চেয়েছেন? আপনি কোনও নির্দিষ্ট সংস্করণ ঘোষণা করতে পারবেন না, সুতরাং আপনি এটির উল্লেখও করতে পারবেন না।
লাসে ভি কার্লসেন

যদি কোনও পদ্ধতি উদাহরণ হিসাবে কেবল তালিকা <স্ট্রিং> সরবরাহ করে। তবে গুরুত্বপূর্ণ নয় :)
Svish

7
হ্যাঁ আমিও ভাবছিলাম ... ফেন্সি ক্লাস {স্ট্রিং writing লেখার সময় পুনঃভাগকারীরা বিচলিত হয় তবে ফ্যানসি ক্লাস {স্ট্রিং writing লেখার সময় নয় ...
চিন্তাভাবনা

6
"কোডিং এর আগে কোডিং" এর উপরের পর্যবেক্ষণের কারণ হ'ল এটি সি # এলিয়াসগুলির সাথে কাজ করে না। উদাহরণস্বরূপ , আপনার পরিবর্তে, ইত্যাদির পরিবর্তে ব্যবহার করতে Int32হবে (অন্য কেউ যদি এতে হোঁচট খায় তবে এই তথ্যটি এখানে রাখা)intSinglefloat
আনোরজাকান

27

টি এল; ডিআর:

"আমি কীভাবে রেফারেন্স করব FancyClass<T>?"

   /// <see cref="FancyClass{T}"/>

"কি হবে FancyClass<T>.FancyMethod<K>(T value)?"

   /// <see cref="FancyClass{T}.FancyMethod{K}(T)"/>

"আমি কীভাবে রেফারেন্স করব FancyClass<string>?"

   /// <see cref="SomeType.SomeMethod(FancyClass{string})"/>
   /// <see cref="FancyClass{T}"/> whose generic type argument is <see cref="string"/>

আপনি এমন কোনও পদ্ধতির উল্লেখ করতে পারেন যার স্বাক্ষরটিতে FancyClass<string>(যেমন একটি প্যারামিটারের ধরণ হিসাবে) অন্তর্ভুক্ত রয়েছে , আপনি সরাসরি এই ধরণের বন্ধ জেনেরিক প্রকারটি উল্লেখ করতে পারবেন না । দ্বিতীয় উদাহরণটি সেই সীমাবদ্ধতার চারপাশে কাজ করে। (এটি স্টাটিক System.String.Concat(IEnumerable<string>)পদ্ধতির জন্য এমএসডিএন রিফাইেন্স পৃষ্ঠায় যেমন দেখা যায় )। :

এক্সএমএল ডকুমেন্টেশন মন্তব্য crefবিধি:

  • জেনেরিক টাইপ প্যারামিটার তালিকাটি{}<> কোণ বন্ধনীগুলির পরিবর্তে কোঁকড়া ধনুর্বন্ধনী সহ। এটি আপনাকে পরবর্তী হিসাবে পালাতে বাঁচায় &lt;এবং &gt;- মনে রাখবেন, ডকুমেন্টেশন মন্তব্যগুলি এক্সএমএল!

  • যদি আপনি একটি উপসর্গ অন্তর্ভুক্ত করেন (যেমনT: প্রকারের M:জন্য, পদ্ধতিগুলির P:জন্য, বৈশিষ্ট্যগুলির F:জন্য, ক্ষেত্রগুলির জন্য), সংকলক রেফারেন্সের কোনও বৈধতা সম্পাদন করবে না, তবে কেবলমাত্র crefডকুমেন্টেশন এক্সএমএল আউটপুটে সরাসরি বৈশিষ্ট্যের মানটি অনুলিপি করবে । এই কারণে, আপনাকে বিশেষ "আইডি স্ট্রিং" সিনট্যাক্স ব্যবহার করতে হবে যা এই জাতীয় ফাইলগুলিতে প্রযোজ্য: সর্বদা পুরোপুরি যোগ্য-শনাক্তকারী ব্যবহার করুন এবং জেনেরিক ধরণের পরামিতিগুলি ( `nপ্রকারে, ``nপদ্ধতিতে) উল্লেখ করতে ব্যাকটিক্স ব্যবহার করুন ।

  • আপনি প্রিফিক্স বাদ তাহলে , নিয়মিত ভাষা নামকরণ নিয়ম প্রযোজ্য: আপনি নামব্যবধান যার জন্য একটা ব্যাপার ড্রপ করতে পারেন usingবিবৃতি, এবং আপনি ভাষা ধরন যেমন কিওয়ার্ড ব্যবহার করতে পারেন intপরিবর্তে System.Int32। এছাড়াও, সংকলক নির্ভুলতার জন্য রেফারেন্সটি পরীক্ষা করবে।

এক্সএমএল ডকুমেন্টেশন মন্তব্য crefপ্রতারণা শীট:

namespace X
{
    using System;

    /// <see cref="I1"/>  (or <see cref="X.I1"/> from outside X)
    /// <see cref="T:X.I1"/>
    interface I1
    {
        /// <see cref="I1.M1(int)"/>  (or <see cref="M1(int)"/> from inside I1)
        /// <see cref="M:X.I1.M1(System.Int32)"/>
        void M1(int p);

        /// <see cref="I1.M2{U}(U)"/>
        /// <see cref="M:X.I1.M2``1(``0)"/>
        void M2<U>(U p);

        /// <see cref="I1.M3(Action{string})"/>
        /// <see cref="M:X.I1.M3(System.Action{System.String})"/>
        void M3(Action<string> p);
    }

    /// <see cref="I2{T}"/>
    /// <see cref="T:X.I2`1"/>
    interface I2<T>
    {
        /// <see cref="I2{T}.M1(int)"/>
        /// <see cref="M:X.I2`1.M1(System.Int32)"/>
        void M1(int p);

        /// <see cref="I2{T}.M2(T)"/>
        /// <see cref="M:X.I2`1.M2(`0)"/>
        void M2(T p);

        /// <see cref="I2{T}.M3{U}(U)"/>
        /// <see cref="M:X.I2`1.M3``1(``0)"/>
        void M3<U>(U p);
    }
}

কিভাবে শুধু Tঅংশ উল্লেখ?
নওফাল

4
চিত্রিত:<typeparamref name="T"/>
নওফাল

21

এখনও অবধি দেখানো উত্তরগুলির কোনওই আমার পক্ষে সম্পূর্ণ কাজ করে না। রিশার্পার সম্পূর্ণরূপে সমাধান না হলে দেখা ট্যাগটিকে Ctrl+ ক্লিক-সক্ষম লিঙ্কে (উদাহরণস্বরূপ চিত্র এখানে) রূপান্তর করবে না ।

যদি ওপিতে পদ্ধতিটি নাম নামের Testজায়গায় থাকে তবে প্রদর্শিত পদ্ধতির সম্পূর্ণ সমাধান হওয়া লিঙ্কটি হ'ল:

<see cref="M:Test.FancyClass`1.FancyMethod``1(`0)"/>

আপনি যেমন কাজ করতে সক্ষম হতে পারেন, ক্লাস ধরণের পরামিতিগুলির সংখ্যার আগে কেবল একটি ব্যাকটিক থাকতে হবে, তারপরে পদ্ধতি ধরণের পরামিতির সংখ্যার আগে দুটি ব্যাকটিক হবে, তারপরে প্যারামিটারগুলি যথাযথ ব্যাকটিক্স সহ শূন্য-সূচকযুক্ত প্যারামিটার।

সুতরাং আমরা দেখতে পাচ্ছি যে FancyClassএক শ্রেণির ধরণের প্যারামিটার রয়েছে, FancyMethodএক ধরণের প্যারামিটার রয়েছে এবং FancyClassপ্যারামিটার ধরণের একটি অবজেক্টটি পদ্ধতিতে পাস হবে।

আপনি আরও উদাহরণস্বরূপ এই উদাহরণে দেখতে পারেন:

namespace Test
{
    public class FancyClass<A, B>
    {
        public void FancyMethod<C, D, E>(A a, B b, C c, D d, E e) { }
    }
}

লিঙ্কটি হয়ে যায়:

M:Test.FancyClass`2.FancyMethod``3(`0,`1,``0,``1,``2)

অথবা "যা তিন প্রকার পরামিতি সঙ্গে একটি পদ্ধতি রয়েছে দুই ধরনের পরামিতি সঙ্গে ক্লাস যেখানে পদ্ধতি পরামিতি হয় ClassType1, ClassType2, MethodType1, MethodType2, MethodType3"


অতিরিক্ত নোট হিসাবে, আমি এই নথিটি কোথাও খুঁজে পাইনি এবং আমি কোনও প্রতিভাবান নই, সংকলক আমাকে এই সব বলেছিল। আপনাকে যা যা করতে হবে তা হ'ল একটি পরীক্ষা প্রকল্প তৈরি করা, এক্সএমএল ডকুমেন্টেশন সক্ষম করা , তারপরে আপনি যে লিঙ্কটির জন্য কাজ করতে চান সেটি কোডটি সন্নিবেশ করান এবং এটিতে এক্সএমএল ডক মন্তব্যের শুরু করা ( ///):

namespace Test
{
    public class FancyClass<T>
    {
        ///
        public string FancyMethod<K>(T value) { return "something fancy"; }
    }

    public class Test
    {
        public static void Main(string[] args) { }
    }
}

তারপরে আপনার প্রকল্পটি তৈরি করুন এবং আউটপুটযুক্ত এক্সএমএল ডকুমেন্টেশনে বৈশিষ্ট্যটির অধীনে doc-> members-> memberউপাদানটির লিঙ্কটি অন্তর্ভুক্ত রয়েছে name:

<?xml version="1.0"?>
<doc>
    <assembly>
        <name>Test</name>
    </assembly>
    <members>
        <member name="M:Test.FancyClass`1.FancyMethod``1(`0)">

        </member>
    </members>
</doc>

3
এটি আরও পরীক্ষা করা উচিত, বিশেষত ট্রায়াল-অ্যান্ড-ত্রুটির মধ্যে না গিয়ে সঠিক স্বীকৃতি খুঁজে পাওয়ার কৌশলটি trick আমার মানুষ কুডোস
পিটার

10

লাসে এবং টিবিসি-র উত্তর থেকে আরও:

/// <see cref="T:FancyClass`1{T}"/> for more information.

/// <see cref="M:FancyClass`1{T}.FancyMethod`1{K}(T)"/> for more information.

এছাড়াও টুলটিপগুলি সঠিকভাবে সরবরাহ করবে, যেখানে তাদের সংস্করণটি কোঁকড়া ধনুর্বন্ধনী সঙ্গে রেন্ডার করে।


2
ব্যবহার <CREF = "System.Collections.Generic.List দেখতে 1{T}"/>** causes a build-time warning: **XML comment on 'Blah' has syntactically incorrect cref attribute 'System.Collections.Generic.List> 1 <টি করবে সম্প্রসারিত কিভাবে এক এই ব্যবহার করা উচিত আপনি যত্ন -
Jakub Januszkiewicz

2
হাই জাকুব, এটি আসলে কাজ করে বলে মনে হচ্ছে না। আমি সঠিকভাবে কাজ করার জন্য টুলটিপগুলি পাবার একমাত্র উপায় হ'ল <cref = "T: <fulTypeName>` 1 {T} "/>।
স্টিফেন ড্র

2
ঠিক আছে, আমি আংশিকভাবে এটি পেয়েছিলাম। যদি পদ্ধতিটি নিজে জেনেরিক না হয় (যেমন তালিকায় <T>। যোগ করুন ()), এটি কাজ করে: <দেখুন ক্রিফ = "এম: সিস্টেম.কলেকশনস en জেনেরিক.লিস্টি 1 {টি}। অ্যাড (টি)" /> ।
জাকুব জানুসজকিউইজ

1
আমার পক্ষে কাজ করছে বলে মনে হয় না। আমার লেখা জেনেরিক এক্সটেনশন পদ্ধতির জন্য মন্তব্য শিরোনামে আমার <ক্রেফ = "এম: সিস্টেম.কলেশনস.জেনারিক.লিসট 1` টি} "/> রয়েছে (একটি অ্যারেলিস্টকে একটি তালিকায় <T> রূপান্তর করে) তবে পুনঃশ্যাপার এটি ফ্ল্যাগ করে সিনট্যাক্স ত্রুটি হিসাবে এবং ইন্টেলিজেন্স কেবল এটি ভারব্যাটিম প্রদর্শন করে। ভিএস 2010 / আর # 6.1.37.86
মাইক

8
আহা! আমি <ক্রেফ = "টি দেখুন: সিস্টেম.কলেশনস.জেনারিক.লিস্টি 1" /> " কাজ করতে সক্ষম হয়েছি । সুতরাং, টি ব্যবহার করে কোঁকড়া ধনুর্বন্ধনীগুলির পরিবর্তে কৌতুকটি করেছে It এটি পুরো নামস্থানটি প্রসারিত করে, আপনি নাম স্থানটি অন্তর্ভুক্ত না করলে কৌশলটি কার্যকর হয় না, সুতরাং এটি নিখুঁত নয়, তবে তা করবে
মাইক লক্স

5
/// Here we discuss the use of <typeparamref name="TYourExcellentType"/>.
/// <typeparam name="TYourExcellentType">Your exellent documentation</typeparam>

3
নোট করুন যে অন্য জবাবগুলি জেনেরিক ক্লাসটি কীভাবে রেফারেন্স করতে হবে তা কভার করে, এই উত্তরটি আপনাকে দেখায় যে কীভাবে নিজের মতো করে প্যারামিটারটি উল্লেখ করতে হবে, যা আমি যা করতে চাইছিলাম তা ঘটেছে।
jrh

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