gpt4 book ai didi

c# - 空接口(interface) vs 属性,通用约束怎么样?

转载 作者:可可西里 更新时间:2023-11-01 08:08:48 25 4
gpt4 key购买 nike

我有一个类,它使用一个空接口(interface)作为“标记接口(interface)”,像这样:

namespace MyNameSpace
{
public interface IMessage
{
//nothing in common here...
}
public class MyMessage : IMessage
{
public void SendMyMessage()
{
//Do something here
}
}
}

我在其他一些帖子中以及在 MSDN ( http://msdn.microsoft.com/en-us/library/ms182128.aspx ) 上读到,应该避免这种情况,您应该使用自定义属性而不是这个空接口(interface)。所以,我可以像这样重构我的代码:

namespace MyNameSpace
{
public class MessageAttribute : Attribute
{
//nothing in common here...
}
[MessageAttribute]
public class MyMessage
{
public void SendMyMessage()
{
//Do something here
}
}
}

一切正常,但主要问题是:

当我在程序的其他地方有一个泛型方法时,例如:

public IEnumerable<T> GetAll<T>() where T : IMessage
{
//Return all IMessage things here
}

在上面的函数中,我确实需要在 T 上添加一些通用类型约束,所以只允许使用 IMessages。当使用自定义属性而不是空接口(interface)时,我如何实现这一点?

这是否证明使用空接口(interface)是合理的?或者我应该使用一个空的抽象类 Message(而不是接口(interface) IMessage,因为 MyMessage 实际上是一个 Message) .

很好奇你是怎么想的。

最佳答案

How could i accomplish this when using a custom attribute instead of an empty interface??? And does this justify the use of an empty interface?

你不能——至少,不能在编译时。您当然可以在运行时检查属性。

Or should i use an empty abstract class Message

基类比接口(interface)更受限制;我个人会施加最少的开销。但我想知道即使是人工界面(它什么也没给你)本身是否只是开销,另一种选择很简单:不要提出任何此类要求。让人们添加一个接口(interface)只是为了让一个方法可以编译并不会给你带来比一开始就没有约束的通用方法更多的东西。

关于c# - 空接口(interface) vs 属性,通用约束怎么样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20188821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com