Bagikan melalui


ExperimentalAttribute

Nota

Artikel ini adalah spesifikasi fitur. Spesifikasi berfungsi sebagai dokumen desain untuk fitur tersebut. Ini termasuk perubahan spesifikasi yang diusulkan, bersama dengan informasi yang diperlukan selama desain dan pengembangan fitur. Artikel ini diterbitkan sampai perubahan spesifikasi yang diusulkan diselesaikan dan dimasukkan dalam spesifikasi ECMA saat ini.

Mungkin ada beberapa perbedaan antara spesifikasi fitur dan implementasi yang selesai. Perbedaan tersebut dicatat dalam catatan dari rapat desain bahasa (LDM) yang relevan.

Anda dapat mempelajari lebih lanjut tentang proses untuk mengadopsi speklet fitur ke dalam standar bahasa C# dalam artikel tentang spesifikasi .

Laporkan peringatan untuk referensi terhadap jenis dan anggota yang diberi tanda dengan System.Diagnostics.CodeAnalysis.ExperimentalAttribute.

namespace System.Diagnostics.CodeAnalysis
{
    [AttributeUsage(AttributeTargets.Assembly |
                    AttributeTargets.Module |
                    AttributeTargets.Class |
                    AttributeTargets.Struct |
                    AttributeTargets.Enum |
                    AttributeTargets.Constructor |
                    AttributeTargets.Method |
                    AttributeTargets.Property |
                    AttributeTargets.Field |
                    AttributeTargets.Event |
                    AttributeTargets.Interface |
                    AttributeTargets.Delegate, Inherited = false)]
    public sealed class ExperimentalAttribute : Attribute
    {
        public ExperimentalAttribute(string diagnosticId)
        {
            DiagnosticId = diagnosticId;
        }

        public string DiagnosticId { get; }
        public string? UrlFormat { get; set; }
        public string? Message { get; set; }
    }
}

Diagnostik yang dilaporkan

Meskipun diagnostik secara teknis merupakan peringatan, sehingga pengompilasi memungkinkan untuk menekannya, ia diperlakukan sebagai kesalahan untuk tujuan pelaporan. Hal ini menyebabkan build gagal jika pesan diagnostik tidak diabaikan.

Diagnostik akan diberikan untuk setiap referensi ke tipe atau anggota yang:

  • ditandai dengan atribut
  • dalam rakitan atau modul yang ditandai dengan atribut

kecuali ketika referensi terjadi pada anggota [Experimental], yang secara otomatis akan ditekan.

Dimungkinkan juga untuk menekan diagnostik dengan cara biasa, seperti opsi kompilator eksplisit atau #pragma.
Misalnya, jika API ditandai dengan [Experimental("DiagID")] atau [Experimental("DiagID", UrlFormat = "https://example.org/{0}")], diagnostik dapat ditekan dengan #pragma warning disable DiagID.

Kesalahan dihasilkan jika ID diagnostik yang diberikan ke atribut eksperimental bukan pengidentifikasi C# yang valid .

Jika nilai untuk properti Message tidak disediakan, pesan diagnostik adalah pesan tertentu, di mana '{0}' adalah jenis atau nama anggota yang sepenuhnya memenuhi syarat.

'{0}' is for evaluation purposes only and is subject to change or removal in future updates.

Jika nilai untuk properti Message disediakan, pesan diagnostik adalah pesan tertentu, di mana '{0}' adalah jenis atau nama anggota yang sepenuhnya memenuhi syarat dan '{1}' adalah Message.

'{0}' is for evaluation purposes only and is subject to change or removal in future updates: '{1}'.

Atribut tidak diwariskan dari tipe dasar atau anggota yang ditimpa.

ObsoleteAttribute dan DeprecatedAttribute

Peringatan untuk [Experimental] dilaporkan dalam anggota [Obsolete] atau [Deprecated].
Peringatan dan kesalahan untuk [Obsolete] dan [Deprecated] dilaporkan pada anggota [Experimental].
Tetapi peringatan dan kesalahan untuk [Obsolete] dan [Deprecated] dilaporkan alih-alih [Experimental] jika ada beberapa atribut.