-2

因此,当涉及到属性等数据时,我们有Order哪个是逻辑,哪个连接视图和逻辑。具有枚举和. 如何在不知道逻辑或视图的接口层的情况下创建属性和属性?IOrderDataOrderPayMethodOrderStatusPayMethodOrderStatusIOrderData

例子:

项目逻辑:

public class Order : IOrder, IOrderData
{
    public enum PayMethod
    {
        iDeal,
        creditcard,
        PayPal
    }

    public enum OrderStatus
    {
        NotPaid,
        InTheMaking,
        Shipped,
        Delivered,
        Confirmed
    }

public OrderStatus Status { get; set; }
public PayMethod Paymethod { get; set; }

项目数据接口:

public interface IOrderData
{
    public OrderStatus Status { get; set; } //doesn't work
    public PayMethod Paymethod { get; set; } //doesn't work
}

Enums我的解决方案:我刚刚为使用枚举的类PayMethod和任何地方创建了一个新的类库,OrderStatus我提到了类库。

4

3 回答 3

3

此代码无法编译,因为您的枚举是Order该类的成员。如果您将它们移出类并使其成为命名空间的顶级成员,如官方文档中所述:

通常最好enum直接在命名空间中定义一个,这样命名空间中的所有类都可以方便地访问它。但是,anenum也可以嵌套在类或结构中。

这将解决问题:

public enum PayMethod
{
    iDeal,
    creditcard,
    PayPal
}

public enum OrderStatus
{
    NotPaid,
    InTheMaking,
    Shipped,
    Delivered,
    Confirmed
}
public interface IOrderData
{
    OrderStatus Status { get; set; } 
    PayMethod Paymethod { get; set; }
}
public class Order : IOrder, IOrderData
{

public OrderStatus Status { get; set; }
public PayMethod Paymethod { get; set; }
于 2019-11-25T08:30:38.020 回答
1

将枚举的声明移到类声明之外,否则接口将不知道该枚举的任何信息。

public enum PayMethod
{
    iDeal,
    creditcard,
    PayPal
}

public enum OrderStatus
{
    NotPaid,
    InTheMaking,
    Shipped,
    Delivered,
    Confirmed
}

public class Order : IOrderData
{
    public OrderStatus Status { get; set; }
    public PayMethod Paymethod { get; set; }
}

public interface IOrderData
{
    OrderStatus Status { get; set; }
    PayMethod Paymethod { get; set; }
}
于 2019-11-25T08:32:04.543 回答
1

您的枚举是子类型,Order因此您必须完全限定名称,Order.如下所示:

public interface IOrderData
{
    Order.OrderStatus Status { get; set; }
    Order.PayMethod Paymethod { get; set; }
}

public也不适用于 C# 7.3 及更低版本中的接口成员(请参阅C # 8+ 的此问题)。

或者,您可以将枚举移到Order类之外,如其他答案中所述。

于 2019-11-25T08:31:01.263 回答