访问从通用抽象库派生的类中的重写的抽象属性所需的接口?

时间:2019-03-26 17:51:04

标签: c# oop generics interface abstract-class

所以我的难题是,为了从add_action( 'woocommerce_before_calculate_totals','conditionally_auto_add_coupon', 30, 1 ); function conditionally_auto_add_coupon( $cart ) { if ( is_admin() && !defined('DOING_AJAX') ) return; // Exit // HERE set the coupon code (in lowercase) $coupon_code = 'mycode'; $total_item = 0; if (WC()->cart->has_discount('mycode')) { foreach( $cart->get_cart() as $cart_item ){ $total_item++; } if($total_item < 2){ $cart->remove_coupon( $coupon_code ); wc_add_notice( __('you have only 1 item in cart'), 'alert'); } else{ $cart->add_discount( $coupon_code ); wc_add_notice( __('coupon added'), 'notice'); } } } 访问IntThingStringThing的{​​{1}},我要定义一个与{{1} },并将其用作对MyPropertyUtilityThing<T>的一般约束。这是可行的,但是鉴于抽象库中已经定义了相同的属性,因此似乎是多余的。我是否在这里缺少设计方面,或者这实际上是在这种情况下所需的设计方式?

MyProperty

1 个答案:

答案 0 :(得分:2)

您需要引入一个新的泛型类型。引入新类型后,您就可以消除对接口的需求。

public class UtilityThing<T, I> where T : Thing<I>, new()
{
    public T DoIt(SomeContext someContext, string name)
    {
        string contextVal = someContext.GetValue(name);

        var thing = new T { MyProperty = contextVal };
        return thing;
    }
}

您可以像这样使用它:

var utility = new UtilityThing<IntThing, int?>();