gpt4 book ai didi

c# - 使用属性来满足接口(interface)需求

转载 作者:行者123 更新时间:2023-11-30 12:53:03 30 4
gpt4 key购买 nike

好吧,我快想多了。有没有一种方法可以组合接口(interface)和属性,使实现类中的特性属性满足接口(interface)契约?

在我的应用程序中,我想显示一个事件列表,它是系统中事件的集合,例如新消息、正在创建/分配/更新的新任务等。这只是一个快速列表发生了什么事。

我考虑过使用 IIsActivity 接口(interface)来标记需要成为此聚合的一部分的实体。我真的只需要显示一个事件标题、它发生的日期,并链接到应用程序中的相关区域。我不想在继承类中强制执行其他属性,这些属性最终只会重复信息。例如,Task 有一个 AssignedOn (DateTime),Message 有一个 CreatedOn (DateTime)。这两者都将满足被视为事件的日期要求。我不想要的是仅针对事件日期的单独属性。同样的事情也可以用于标题(Message 有一个 Title 属性,Task 有一个 Name 属性)。

所以,我基本上想说,“给我任何东西,这是一个 IIsActivity。在每个实现者中,我希望有一个属性标记为 ActivityTitle 属性,一个属性标记为 ActivityDate 属性。”

太多了?

最佳答案

我认为最好的方法是使用显式接口(interface)实现。

public interface IActivity
{
DateTime OccurredOn { get; }
}

public class Task : IActivity
{
public DateTime AssignedOn
{
get { /* implemenation */ }
}

DateTime IActivity.OccurredOn
{
get { return AssignedOn; }
}
}

public class Message : IActivity
{
public DateTime CreatedOn
{
get { /* implemenation */ }
}

DateTime IActivity.OccurredOn
{
get { return CreatedOn; }
}
}

然后你可以像这样使用你的类:

public static void Main()
{
Task task = new Task();
Console.WriteLine(task.AssignedOn); // OK
Console.WriteLine(task.OccurredOn); // Compile Error
IActivity activity = task as IActivity;
if (activity != null)
{
Console.WriteLine(activity.AssignedOn); // Compile Error
Console.WriteLine(activity.OccurredOn); // OK
}
}

关于c# - 使用属性来满足接口(interface)需求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2999253/

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