gpt4 book ai didi

c# - 在接口(interface)的实现中修改特定于类型的属性

转载 作者:太空宇宙 更新时间:2023-11-03 20:41:47 25 4
gpt4 key购买 nike

这是我的:

public interface IEvent {
int Id
string Title

}

public class MeetingEvent : IEvent {
int Id
string Title

//Meeting Properties
string Room;
User Organizer;
}

public class BirthdayEvent : IEvent {
int Id
string Title

//Bday Properties
int Candles;
bool Surprise;
}

我正在 ASP.NET MVC 中使用自定义模型绑定(bind)器,因为我的主要编辑表单继承自 IEvent,同时我执行 RenderPartial 以添加其他特定于类型的字段

当我到达模型绑定(bind)器时,我可以看到该类型的所有键/值,这很好。现在,我想这样做:

IEvent _event;

switch (eventType) { // EventType is an enum
case EventType.Birthday:
_event = new BirthdayEvent();

_event.Candles= GetValue<int>(bindingContext, "Candles");
_event.Surprise= GetValue<bool>(bindingContext, "Surprise");
break;

case EventType.Meeting:
_event = new MeetingEvent();

// Meeting-specific fields are set here...
break;

default:
throw new InvalidOperationException("Invalid Event Type");
}

本质上,我想要一个 IEvent 变量,我想创建一个特定的事件类型来实现 IEvent 并设置特定于类型的字段。 Visual Studio 告诉我它无法访问 BirthdayEvent 字段。

虽然我明白这一点,但我似乎无法弄清楚我需要做什么。

最佳答案

当您第一次创建 BirthdayEventMeetingEvent 实例时,将它们放入该类型的变量中。这样您就可以分配这些成员。然后将它们分配给您的 _event 变量。像这样:

switch (eventType) {  // EventType is an enum
case EventType.Birthday:
{
var be = new BirthdayEvent();

be.Candles= GetValue<int>(bindingContext, "Candles");
be.Surprise= GetValue<bool>(bindingContext, "Surprise");
_event = be;
break;
}
case EventType.Meeting:
{
var me = new MeetingEvent();

// Meeting-specific fields are set here...
_event = me;
break;
{
default:
throw new InvalidOperationException("Invalid Event Type");
}

关于c# - 在接口(interface)的实现中修改特定于类型的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2311799/

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