CA2260: Genel matematik arabirimlerini doğru uygulama
Özellik | Değer |
---|---|
Kural Kimliği | CA2260 |
Başlık | Genel matematik arabirimlerini doğru uygulama |
Kategori | Kullanım |
Hataya neden olan veya bozulmayan düzeltme | Hataya neden olmayan |
.NET 8'de varsayılan olarak etkin | Uyarı olarak |
Neden
Bu kural, kendi kendine yinelenen bir tür parametresi gerektiren genel bir matematik arabirimi uyguladığınızda ve türün kendisini tür parametresi olarak geçirmediğinizde tetikler.
Kural açıklaması
Bazı genel matematik arabirimleri statik soyut üyeler sunar. Bu statik üyelere erişmenin tek yolu, "merakla yinelenen şablon deseni" (CRTP) uygulayan genel bir kısıtlamadan geçer. Bu nedenle, türetilmiş türün kendisi kendi kendine yinelenen tür parametresi için kullanılmalıdır. Bir tür gerekli tür parametresini geçirmeden böyle bir arabirim uygularsa ve CA2260 yoksayılırsa, kod başarıyla derlenir ancak statik soyut erişilebilir olmaz. Bu nedenle, türü kullanılabilir olmayacaktır. Derleyici, bu tür kullanımda CS0315 kimliğine sahip bir uyarı yayar.
İhlalleri düzeltme
Bu arabirimleri uygularken kendi kendine yinelenen tür parametresi (TSelf) için doğru tür parametresini geçirin.
Örnek
İhlal:
using System;
// Warns: The 'IParsable<TSelf>' requires the 'TSelf' type parameter to be filled with the derived type 'MyDate'
public readonly struct MyDate : IParsable<DateOnly>
{ ... }
Düzeltme:
MyDate
türü arabirimi için IParsable<TSelf>
tür parametresi olarak geçirin.
using System;
// No warning
public readonly struct MyDate : IParsable<MyDate>
{ ... }
Hatalar ne zaman gizlenecek?
Bu kuraldan uyarıyı bastırmayın.