Tag: interface

XML对象反序列化到接口

我有两个类SccmAction和TicketAction,它们都实现了接口IDelivery。 这些类将在一个处理队列上传输,我只想从中获取消息并根据Deliver方法进行操作。 但是,我似乎无法反序列化到接口,因为当我尝试这样做时会抛出System.NotSupportedException 。 从我收集的内容来看,XMLSerializer需要一个具体的序列化类型。 这是否让我不得不创建一个实现IDelivery并从中inheritanceSccmAction和ArsAction的抽象类? 我错过了什么吗? 编辑进一步说明 我可能有一个设计缺陷,但我的目的是从包含这些对象的队列中提取消息。 我的目的是让所有离开此队列的对象实现接口,确保处理对象的应用程序只对Deliver方法进行操作。 Deliver的每个对象实现都会有所不同。 要反序列化的代码 using (SqlConnection connection = new SqlConnection(ConnectionString)) { SqlCommand command = new SqlCommand(ReceiveString, connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); while (reader.Read()) { byte[] sb = (byte[])reader[“message_body”]; SccmAction sa = DeserializeObject(sb); IDelivery iD = DeserializeObject(sb); } reader.Close(); } public static T DeserializeObject(byte[] ba) { XmlSerializer […]

为什么使用显式接口实现来调用受保护的方法?

在codeplex中浏览ASP.NET MVC源代码时,我发现有一个类显式实现接口是很常见的。 显式实现的方法/属性然后调用具有相同名称的另一个“受保护的虚拟”方法/属性。 例如, public class MvcHandler : IHttpHandler, IRequiresSessionState { protected virtual bool IsReusable { get { return false; } } bool IHttpHandler.IsReusable { get { return IsReusable; } } } 我现在确定这种编程的好处是什么。 对我来说,我更喜欢隐式实现接口IHttpHandler。 我猜作者只是不希望MvcHandler有一个公共属性IsResuable 。 仅当MvcHandler的实例被视为IHttpHandler时,才能使用属性IsReusable 。 不过,我不确定为什么作者这样做。 有人知道这种界面实现的更多好处吗?

实现后密封接口

我正在做一个小项目,我遇到了这个问题。 项目输出是包含接口的库。 我希望实现该接口并尽可能密封其中的函数: public interface ITest { void SomeMethod(); } class A : ITest { public sealed override SomeMethod() { } } 我们的想法是让每个人都可以使用该界面,并拥有一些实现它的专门类。 例外情况是,我想确保如果某人创建了类型A的专用类,他/她将无法更改方法的行为。 问题是您不能在其中放置“override”关键字,因为该方法未在界面中声明为“虚拟”。 并且您不能在接口中将其声明为“虚拟”,因为它是不允许的。 并且您无法删除“override”关键字,因为“密封”需要它。 任何变通方法或头脑风暴的想法都会受到欢迎,但如果有人能想出一个包含界面的解决方案,我真的很乐意学习它! 谢谢! 编辑:忘了这个问题! 就像Ani说的那样,我忘了默认C#中的方法是密封的。 似乎偶尔回到基础知识总是好的…

C#接口不能包含运算符

任何人都可以解释为什么不允许C#接口包含运算符? 谢谢。

有关Virtual / new …以及接口的更多信息!

昨天我发布了一个关于new / virtual / override关键字的问题,我从你的答案中学到了很多东西。 但我仍有一些疑虑。 在所有“盒子”之间,我与类型的方法表中真正发生的事情失去联系。 例如: interface I1 { void Draw(); } interface I2 { void Draw(); } class A : I1, I2 { public void Minstance() { Console.WriteLine(“A::MInstance”); } public virtual void Draw() { Console.WriteLine(“A::Draw”); } void I2.Draw() { Console.WriteLine(“A::I2.Draw”); } } class B : A, I1, I2 { public new virtual […]

为什么返回集合接口而不是具体类型?

我注意到在其他人的代码中,返回generics集合的方法几乎总是返回一个接口(例如IEnumerable或IList ),而不是具体的实现。 我有两个相关的问题。 首先,为什么(如果有的话)返回接口被认为更好? 其次,是否有一个包含Sort方法的集合接口(如List那样)?

C#:通过显式指定接口来覆盖属性

在尝试从Collection类覆盖ICollection.IsReadOnly属性的显式接口实现时,我遇到了一些文档,指出显式接口成员实现无法被覆盖,因为它们不能具有virtual或abstract等修饰符。 在MSDN上,他们甚至可以通过创建另一个由显式接口成员实现调用的抽象或虚拟成员来指定如何使显式接口成员实现可用于inheritance。 到目前为止没问题。 但后来我想知道: 为什么C#可以通过显式指定接口来覆盖任何显式实现的接口成员? 例如,假设我有一个这样的简单接口,具有属性和方法: public interface IMyInterface { bool AlwaysFalse { get; } bool IsTrue(bool value); } 还有一个显式实现接口的类A ,并且有一个方法Test() ,它调用自己的接口成员实现。 public class A : IMyInterface { bool IMyInterface.AlwaysFalse { get { return false; } } bool IMyInterface.IsTrue(bool value) { return value; } public bool Test() { return ((IMyInterface)this).AlwaysFalse; } } 如您所见,四个成员中没有一个是虚拟的或抽象的,所以当我像这样定义一个B类时: public class […]

我可以将基于接口的对象传递给MVC 4 WebApi POST吗?

我希望有这样的API: public class RelayController : ApiController { // POST api/values public void Post([FromBody]IDataRelayPackage package) { MessageQueue queue = new MessageQueue(“.\\private$\\DataRelay”); queue.Send(package); queue.Close(); } } 我得到’包’的空值,所以我想知道可能出错的地方。 我唯一的想法是默认的JSON序列化程序无法处理这个,但我不清楚如何解决它。

接口是否与多态性兼容

我遇到了与多态类型(甚至多态接口)交互的接口概念的问题。 我正在开发C#,并希望能够接近这个定义的答案,尽管我认为这仍然为每个人提供了足够的空间来提出答案。 举个例子,假设你想制作一个绘制东西的程序。 您为Paints定义了一个接口,并为绘制的主题定义了一个接口。此外,您还有一些可以更具体的方式绘制的主题。 interface IPainter { void paint(IPaintable paintable); } interface IPaintable { void ApplyBaseLayer(Color c); } interface IDecalPaintable : IPaintable { void ApplyDecal(HatchBrush b); } 我可以想象制作一个类似于以下的画家: class AwesomeDecalPainter : IPainter { public void paint(IPaintable paintable) { IDecalPaintable decalPaintable = (IDecalPaintable)paintable; decalPaintable.ApplyBaseLayer(Color.Red); decalPaintable.ApplyDecal(new HatchBrush(HatchStyle.Plaid, Color.Green)); } } 当然,如果paintable没有实现IDecalPaintable,这将抛出。 它立即引入了IPainter实现与其操作的IPaintable之间的耦合。 但是我也认为说AwesomeDecalPainter不是IPainter是不合理的,因为它的使用仅限于IPaintable域的一个子集。 所以我的问题实际上是四方面的: 接口是否与多态性兼容? 实现可以在IDecalPaintable上运行的IPainter是一个好的设计吗? 如果它可以专门在IDecalPaintable上运行呢? […]

你能帮我理解一个实际例子中的抽象类和接口的用法吗?

你能否给我一个对抽象类和inheritance使用几乎过于简单化的理解并帮助我,这样我才能真正理解这个概念以及如何实现? 我有一个项目,我正在努力完成,并且失去了如何实施。 我一直在和我的教授聊天,并被告知,如果我无法弄明白,我可能还没准备好上课。 我已经完成了prequestite课程,但仍然无法理解这些概念。 为了澄清,到目前为止我所做的项目如下。 我还没有填写狗/猫类等。 你能指点一下吗? 我不是要求任何人给我“答案”。 我只是迷失在哪里。 我参加在线课程,他与我的沟通工作一直令人不安。 我刚刚完成了所有其他课程的4.0,所以我愿意付出努力,但我对这些概念的理解以及如何实际应用它们感到迷茫。 是否有任何意见或帮助可以让我在这个项目中取得进一步进展? 我要实现的内容如下: 概述: 本练习的目的是演示Interfaces,Inheritance,Abstract classes和Polymorphism的使用。 您的任务是获取提供的程序shell并添加适当的类和相应的类成员/方法,以使此程序正常运行。 您不能对提供的任何代码进行更改,您只能添加您编写的类。 尽管有许多方法可以使程序正常工作,但您必须使用演示接口使用的技术, inheritance,抽象类和多态。 同样,为了清楚起见,您可以添加到提供的代码,但不能更改或删除任何代码。 提供的代码将使用非常少的附加代码,并将满足练习的要求。 如果成功完成分配,程序运行时应输出以下语句: 我的名字是Spot,我是一只狗 我的名字是费利克斯,我是一只猫 要求: 1)您必须有一个名为“Animal”的抽象基类,Dog和Cat类可以从中派生出来。 2)Animal基类必须从接口’IAnimal’派生,它是唯一应该从IAnimal派生的类。 3)由于所有动物都有一个名字,一个名字不是一个特定于狗或猫的属性,动物 基类应该是存储名称的位置以及实现WhatIsMyName get-property的位置。 4)您需要创建一个仅从Animal基类派生的Dog和Cat类。 5)Dog和Cat类应该实现WhatAmI get-property并返回相应的字符串值。 您无法更改的代码: using System; namespace IT274_U2 { public interface IAnimal { string WhatAmI { get; } string WhatIsMyName { get; } } […]