C# 如何在接口中使用枚举?
因此,我们有C# 如何在接口中使用枚举?,c#,asp.net-core,enums,interface,multi-tier,C#,Asp.net Core,Enums,Interface,Multi Tier,因此,我们有Order这是逻辑,而IOrderData在涉及类似数据的属性时连接视图和逻辑Order具有enumsPayMethod和OrderStatus的属性。在接口层既不知道逻辑也不知道视图的情况下,如何在IOrderData中创建PayMethod和OrderStatus的属性 例如: 项目逻辑: public class Order : IOrder, IOrderData { public enum PayMethod { iDeal,
Order
这是逻辑,而IOrderData
在涉及类似数据的属性时连接视图和逻辑Order
具有enumsPayMethod
和OrderStatus
的属性。在接口层既不知道逻辑也不知道视图的情况下,如何在IOrderData
中创建PayMethod
和OrderStatus
的属性
例如:
项目逻辑:
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
}
我的解决方案:我刚刚为
enum
创建了一个新的类库,其中包含PayMethod
和OrderStatus
类,在使用enum的任何地方,我都引用了类库。此代码不会编译,因为您的enum是Order
类的成员。
如果将它们移出类并使其成为命名空间的顶级成员,如中所述:
通常,最好直接在名称空间中定义枚举
,以便名称空间中的所有类都能以同样的便利性访问它。但是,enum
也可以嵌套在类或结构中
这将解决问题:
public enum PayMethod
{
iDeal,
creditcard,
PayPal
}
public enum OrderStatus
{
NotPaid,
InTheMaking,
Shipped,
Delivered,
Confirmed
}
您的枚举是顺序的子类型,因此必须使用顺序对名称进行完全限定。如下:
public interface IOrderData
{
Order.OrderStatus Status { get; set; }
Order.PayMethod Paymethod { get; set; }
}
另外,public
不适用于C#7.3及以下版本中的接口成员(参见C#8+)
或者,您可以将枚举移到类声明的
外部,如中所述。将枚举的声明移到类声明的外部,否则接口将不知道有关该枚举的任何信息
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; }
}
我的命名空间的顶级成员。那么,这是否意味着将其置于名称空间之上,或者为Enum创建一个全新的项目?@Zheng rongCai如果Enum是接口的一部分,通常您会将它们的定义放在与接口本身相同的源代码文件中。这意味着将它们直接放在名称空间之下,而不是像问题中的代码那样放在类内部。您不需要另一个项目来将它们放入。但是接口无法知道逻辑(枚举所在的位置),因此它仍然会给出错误Enums not Logic。它们只是一组常数。接口也不是逻辑,它只是一个契约。所有逻辑都在实现接口的类型上。
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; }
}