سؤال

لقد حصلت على abstract الفئة التي لديها قيد النوع.لكنني أريد أيضًا أن أجعل abstract فئة تنفيذ واجهة.

على سبيل المثال:

public abstract class PostEvent<TPost> : IDomainEvent, where TPost : Post, new()

الذي لا يجمع.

لا أريد هذا:

public abstract class PostEvent<TPost> where TPost : Post, IDomainEvent, new()

لأن هذا يعني TPost : IDomainEvent

أريد PostEvent : IDomainEvent

ما هو بناء الجملة؟

هل كانت مفيدة؟

المحلول

جرب هذا:

public abstract class PostEvent<TPost> : IDomainEvent where TPost : Post, new() 

لا تريد فاصلة بين قائمة الواجهة والقيود العامة.

نصائح أخرى

أنت بحاجة إلى تنفيذه فعليًا (لا يمكنك ترك التنفيذ بحتة إلى أنواع الخرسانة - يجب أن تعرف من أين تبدأ):

public abstract class PostEvent<TPost> : IDomainEvent
    where TPost : Post, new()
{
    public abstract void SomeInterfaceMethod();
}

يمكنك أيضًا استخدام تطبيق واجهة صريح وطريقة مجردة محمية إذا كنت لا تريد Otis على واجهة برمجة التطبيقات العامة:

public abstract class PostEvent<TPost> : IDomainEvent
    where TPost : Post, new()
{
    protected abstract void SomeInterfaceMethod();
    void IDomainEvent.SomeInterfaceMethod() {
        SomeInterfaceMethod(); // proxy to the protected abstract version
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top