หมายเหตุ
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลอง ลงชื่อเข้าใช้หรือเปลี่ยนไดเรกทอรีได้
การเข้าถึงหน้านี้ต้องได้รับการอนุญาต คุณสามารถลองเปลี่ยนไดเรกทอรีได้
เป้าหมายสูงสุดสําหรับเอกสาร .NET API คือการมีข้อคิดเห็น /// XML ในรหัสแหล่งที่มา .NET เป็น "แหล่งที่มาของความจริง" สําหรับ MSBuild, ASP.NET Core และ EF Core เป้าหมายนี้ได้รับการปฏิบัติตามแล้ว อย่างไรก็ตาม ขณะนี้ ที่เก็บ dotnet-api-docs ยังคงเป็นแหล่งที่มาของความจริงสําหรับการอ้างอิงหลัก .NET API ปัญหา dotnet/รันไทม์นี้จะติดตามความพยายามในการ backport .NET docs และทําให้ dotnet/รันไทม์ นี้เป็นที่เก็บแหล่งที่มาของความจริง
บทความนี้มีเคล็ดลับเกี่ยวกับการเขียนข้อคิดเห็นของเอกสารที่ดีภายในโค้ดต้นฉบับเอง
ข้อคิดเห็นที่ดีทําให้สําหรับเอกสารที่ดี
ข้อคิดเห็นแบบสามสแลชของ API .NET จะถูกแปลงเป็นเอกสารสาธารณะบน learn.microsoft.com และจะปรากฏใน IntelliSense ใน IDE ข้อคิดเห็นควรเป็น:
- สมบูรณ์ - รายการเอกสารที่ว่างเปล่าสําหรับวิธีการ พารามิเตอร์ ข้อยกเว้น และอื่นๆ ทําให้ API รู้สึกว่าได้รับการรองรับ ชั่วคราว หรือเล็กน้อย
- ที่ถูกต้อง—ผู้อ่านสแกนเพื่อดูรายละเอียดที่สําคัญและเกิดความยุ่งยากเมื่อข้อมูลสําคัญสูญหายหรือไม่ถูกต้อง
- บริบท —ผู้อ่านเข้าสู่หน้านี้จากการค้นหาและต้องการทราบวิธีการและเวลาในการใช้ API และความหมายโดยนัยของโค้ดคืออะไร
- ขัด -- หรือมีไวยากรณ์และการสะกดคําสามารถสร้างความสับสนให้กับผู้อ่านและทําให้แม้แต่การเรียกง่ายไม่ชัดเจน นอกจากนี้การนําเสนอที่ไม่ดีก็สื่อสารการลงทุนต่ํา
แนวทางปฏิบัติ
ใช้
crefแทนhrefเพื่อเชื่อมโยงไปยังชนิดหรือวิธีอื่นถูกต้อง:
<param name="configFile">An <see cref="XmlConfigResource" /> object.</param>ไม่ถูกต้อง:
<param name="configFile">An <a href="https://learn.Microsoft.com/{path}/XmlConfigResource"></a> object.</param>เมื่ออ้างอิงพารามิเตอร์ ให้ครอบชื่อพารามิเตอร์ใน
<paramref>แท็ก ตัวอย่างเช่นThe offset in <paramref name="source" /> where the range begins.ถ้าคุณมีมากกว่าหนึ่งย่อหน้าในข้อคิดเห็นของเอกสาร ให้แยกย่อหน้าด้วย
<para>แท็กครอบตัวอย่างโค้ดใน
<code>แท็กภายใน<example>แท็กใช้
<seealso>เพื่อเพิ่มลิงก์ไปยัง API อื่นๆ ในส่วน "ดูเพิ่มเติม" โดยอัตโนมัติ
แท็กเอกสาร XML
| แท็ก | วัตถุประสงค์ | ตัวอย่าง |
|---|---|---|
<altmember> |
เพิ่มลิงก์ "ดูเพิ่มเติม" ไปยัง API ที่ระบุ | <altmember cref="System.Console.Out" /> |
<c> |
จัดรูปแบบข้อความที่ระบุเป็นโค้ดภายในคําอธิบาย | Gets the current version of the language compiler, in the form <c>Major.Minor.Revision.Build</c>. |
<code> |
จัดรูปแบบหลายบรรทัดเป็นโค้ด | <code language="csharp">using(logger.BeginScope("Processing request from {Address}", address)) { }</code> |
<example> |
เพิ่มตัวอย่างโค้ดภายใต้หัวเรื่อง "ตัวอย่าง" H2 | <example><code language="csharp">using(logger.BeginScope("Processing request from {Address}", address)) { }</code></example> |
<exception> |
อธิบายข้อยกเว้นที่ API สามารถโยนได้ | <exception cref="T:System.ArgumentException">No application identity is specified in <paramref name="identity" />.</exception> |
<include> |
อ้างอิงถึงข้อคิดเห็นในไฟล์อื่นที่อธิบาย API ในโค้ดต้นฉบับของคุณ | <include file="../docs/AbsoluteLayout.xml" path="Type[@FullName='Microsoft.Maui.Controls.AbsoluteLayout']/Docs/*" />ตัวอย่าง .NET MAUI |
<inheritdoc> |
สืบทอดข้อคิดเห็น XML จากคลาสพื้นฐาน อินเทอร์เฟซ และวิธีการที่คล้ายกัน | <inheritdoc /> |
<list> |
สร้างรายการที่มีสัญลักษณ์แสดงหัวข้อย่อยหรือลําดับเลข | <list type="bullet"><item><description>Set the root path to the result.</description></item><item><description>Load host configuration.</description></item></list> |
<para> |
แยกย่อหน้า | |
<paramref> |
อ้างอิงถึงพารามิเตอร์เมธอด | Returns the activity with the specified <paramref name="id" />. |
<related> |
เพิ่มลิงก์ "ดูเพิ่มเติม" ไปยังบทความที่ระบุ | <related type="Article" href="/dotnet/framework/ado-net-overview">ADO.NET overview</related> |
<see cref> |
ลิงก์ไปยัง API อื่น | Describes the behavior that caused a <see cref="Scroll" /> event. |
<see langword> |
จัดรูปแบบข้อความที่ระบุเป็นโค้ด | Gets the value of the <see langword="Accept-Ranges" /> header for an HTTP response. |
<seealso> |
เพิ่มลิงก์ "ดูเพิ่มเติม" ไปยัง API ที่ระบุ | <seealso cref="T:System.Single" /> |
<typeparamref> |
อ้างอิงถึงพารามิเตอร์ชนิด | The <typeparamref name="THandler" /> is resolved from a scoped service provider. |
สําหรับข้อมูลเพิ่มเติม ดู แท็ก XML ที่แนะนําสําหรับ C# และ ข้อกําหนด C# ส เปค ECMAXML ยังมีข้อมูลที่ดีแม้ว่าจะทราบว่ามีความแตกต่างบางอย่างระหว่างข้อคิดเห็นเอกสารของ ECMAXML และ /// (ตัวอย่างเช่น เป้าหมายของ cref จะขยายเต็มที่และมีคํานําหน้าใน ECMAXML)
การอ้างอิงโยง
เมื่อคุณใช้ <see cref> แท็กเพื่อเชื่อมโยงไปยัง API อื่น คุณไม่จําเป็นต้องเพิ่มคํานําหน้าไปยังชื่อชนิด เช่น T: สําหรับชนิดหรือ M: วิธีการ อันที่จริงแล้ว กฎการวิเคราะห์ โค้ด CA1200 จะตั้งค่าสถานะข้อคิดเห็นของโค้ดที่เพิ่มคํานําหน้าไปยังชื่อชนิดใน cref แท็ก อย่างไรก็ตาม มีข้อยกเว้นสองสามข้อสําหรับกฎนี้:
- เมื่อคุณต้องการเชื่อมโยงไปยังรูปแบบทั่วไปของเมธอดที่มีมากกว่าหนึ่งโอเวอร์โหลด คอมไพเลอร์ C# จะไม่สนับสนุน การแก้ไขปัญหาชั่วคราวสําหรับเอกสารคือคํานําหน้าชื่อเมธอดที่มี
O:ในซอร์สโค้ด (หรือOverload:ใน ECMAXML) และระงับกฎ CA1200 ตัวอย่างเช่น:<altmember cref="O:System.Diagnostics.Process.Kill" /> - เมื่อไม่สามารถแก้ไข API จากบริบทปัจจุบันซึ่งรวมถึงคําสั่งใดๆ
usingได้ ในกรณีนี้ ใช้ชื่อ API แบบเต็มที่มีคํานําหน้า
เมื่อ <see cref> แท็กถูก แปลงเป็น ECMAXML mdoc จะแทนที่ชื่อประเภทด้วย DocId แบบเต็มของ API ซึ่งรวมถึงคํานําหน้า
คำอธิบาย
สําหรับแนวทางอย่างเป็นทางการเกี่ยวกับการอธิบายชนิดของสัญลักษณ์แต่ละชนิดและส่วนต่าง ๆ โปรดดู wiki เอกสาร .NET API
ข้อคิดเห็นที่ว่างเปล่า
ข้อความตัวยึดที่รู้จักกันดีสําหรับข้อคิดเห็นที่ว่างเปล่าคือTo be added. ระบบรุ่น Learn จดจําข้อความนี้และลบออกเมื่อ ECMAXML ถูกแปลงเป็น HTML โดยให้คําอธิบายว่างเปล่า
ไฟล์รหัสแยกต่างหาก
ถ้าตัวอย่างโค้ดของคุณมีความยาว คุณสามารถใส่ในไฟล์แยกต่างหากใน repo ของเอกสาร และลิงก์จากโค้ดต้นทางด้วยวิธีต่อไปนี้:
/// <example>
/// <format type="text/markdown">
/// <]
/// ]]></format>
/// </example>
แอตทริบิวต์ภาษา
แอตทริบิวต์ภาษาบน <code> แท็กเป็นตัวเลือกแต่จะทําให้มีการจัดรูปแบบโค้ดอย่างถูกต้อง/ถูกจัดรูปแบบ ตัวอย่างเช่น:
/// <example>
/// This sample shows the basic pattern for defining a typed client class.
/// <code language="csharp">
/// class ExampleClient
/// {
/// private readonly HttpClient _httpClient;
/// private readonly ILogger _logger;
///
/// // Typed clients can use constructor injection to access additional services.
/// public ExampleClient(HttpClient httpClient, ILogger<ExampleClient> logger)
/// {
/// _httpClient = httpClient;
/// _logger = logger;
/// }
/// }
/// </code>
/// </example>
API ภายใน
เมื่อจัดทําเอกสาร API ที่ไม่ได้มีไว้สําหรับผู้บริโภค ใช้การใช้คําที่คล้ายกับต่อไปนี้:
<summary>This type supports the .NET infrastructure and is not intended to be used directly from your code.</summary>