Aracılığıyla paylaş


Derleyici Uyarısı (düzey 1) C4462

Türün GUID'i belirlenemiyor. Program çalışma zamanında başarısız olabilir.

Uyarı C4462, bir Windows Çalışma Zamanı uygulamasında veya bileşeninde, genel TypedEventHandler bir tür parametresi olarak kapsayan sınıfa başvuru olduğunda oluşur.

Bu uyarı otomatik olarak bir hataya yükseltilir. Bu davranışı değiştirmek istiyorsanız #pragma uyarısını kullanın. Örneğin, C4462'yi düzey 4 uyarı sorununa dönüştürebilmek için bu satırı kaynak kod dosyanıza ekleyin:

#pragma warning(4:4462)

Örnek

Bu örnek C4462 uyarı oluşturur:

namespace N
{
    public ref struct EventArgs sealed {};
    public ref struct R sealed
    {
        R() {}
        event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;
    };
}

[Platform::MTAThread]
int main()
{
    auto x = ref new N::R();
}

Hataya geçici bir çözüm bulmanın iki yolu vardır. Bunlardan birinde, bir sonraki örnekte gösterildiği gibi, olaya dahili erişilebilirlik vererek onun aynı yürütülebilir dosya üzerinde kodun kullanımına açık olması, aynı zamanda diğer Windows Çalışma Zamanı bileşenlerinde kodun kullanımına açık olmaması sağlanabilir.

internal:
    event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;

Olayın genel olması gerekiyorsa, ikinci yöntem kullanılabilir, yani olay varsayılan arabirim yoluyla genele açılabilir:

ref struct R;
public interface struct IR{ event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;};

public ref struct R sealed : [Windows::Foundation::Metadata::Default] IR
{
    R() {}
    virtual event Windows::Foundation::TypedEventHandler<R ^, EventArgs^>^ e;
};

Türün GUID'i yalnızca türe Windows::Foundation::TypedEventHandler<R^, EventArgs^>^ başka bir bileşenden erişildiğinde kullanılır. İlk geçici çözüm, çözüm uygulandıktan sonra yalnızca kendi bileşeni içinden erişilebilir olduğu için işe yarayacaktır. Aksi durumda, derleyici en kötü durumu varsayarak uyarıyı yaymak zorunda kalır.