c#: 继承的/界面的静态成员?
有没有办法要求班级具有特定的抽象成员?这样的东西: public interface IMaxLength { public static uint MaxLength { get; } } 或以下: public abstract class ComplexString { public abstract static uint MaxLength { get; } } 我想强制执行一种类型(通过继承或接口?)具有静态成员.可以做到吗? 解决方案 您可以创建一个自定义属性,该属性允许执行要求作为运行时保证.这不是一个完全完整的代码示例(您需要在应用程序启动中调用验证staticinterfaces,并且需要填写标记的todo),但它确实显示了必需品. 我假设您在问这个问题,以便您可以保证成功基于反射的呼叫命名方法. [AttributeUsage(AttributeTargets.Class | AttributeTargets.
0 2024-04-21
编程技术问答社区
使用DataContractSerializer序列化一个接口列表
我有一个课,其中有一些嵌套的类.我将其序列化,并使用没有问题的方法将其发送到WCF服务.这是班级; public class ComputerDTO { [DataMember] public ComputerTypeDTO Type { get; set; } [DataMember] public string ComputerName { get; set; } [DataMember] public MonitorDTO Monitor { get; set; } } 这是方法; public void Check() { Computer c = new Computer(); ISystemInfoOperations cli = GetServiceClient(); Mapper.CreateMap(); Mapper.Crea
0 2024-04-21
编程技术问答社区
抽象类是接口的一种吗?
在我的/接口文件夹中,我都放置了所有接口. 抽象类是一种界面类型? 解决方案 在C#中,接口与类(甚至抽象类)不同. 接口只能定义API(方法签名,事件声明,属性声明),而不是实现(字段,方法主体等) 您只能继承一个基类,但是您可以实现多个接口 但是它们在某些用法中具有相似之处 - 例如,在抽象出厂实施中使用时. 其他解决方案 描述技术差异的答案是正确的,但还有更多.还有一个语义差异. 接口和抽象类之间的区别在于,接口代表做某事的能力,而抽象类表示一类对象的共同点. iDisposable界面表示"我知道如何处理我的重要资源"的概念;这是对象可以做的事情,而不是对象是. 相比之下,如果您要制作抽象类动物,那将代表所有动物的共同特征.世界上没有任何物体是"动物"的,而没有一些更具体的动物 - 金毛猎犬,国王鲑鱼,狮子等.我们通过使班级抽象来表示这一事实. 其他解决方案 否.有几个区别.主要区别在于,抽象类中可以有实现细节.一个类
0 2024-04-21
编程技术问答社区
如何用CodeDom创建一个接口方法
我正在使用编码来生成我的WCF服务接口和实现文件.我找不到CodeMemberMethod上的任何选项,可以使我能够生成接口方法.如果我使用MemberAttributes.Abstract,我几乎在那里,但它包含了一个抽象关键字,这对于接口而言无效.有人知道正确的语法生成方法吗? 这是我开发的代码来生成接口文件: private void CreateServiceContractFile(Type entity, BoElement bo, DirectoryInfo serviceOutputDir, AppParameters appPrams) { CodeCompileUnit serviceFileUnit = new CodeCompileUnit(); CodeNamespace importNameSpace = new CodeNamespace(""); importNameSpace.Imports.Add(new Code
0 2024-04-21
编程技术问答社区
静态成员和接口
我只是在这个主题上遇到了一些问题,发现这是(目前?)无法在接口中定义静态成员或虚拟静态方法.我现在正在挣扎.让我尝试用一​​个简单的例子描绘它: 我有一个名为Say IAnimal的接口,具有以下定义: interface IAnimal { ... int Chromosomes {get; } //should ideally be static, but that's not allowed! ... } 然后,我有一种实现IAnimal的基类动物,并提供了所有动物共有的某些方法的实现: abstract class Animal : IAnimal { ... public abstract int Chromosomes {get; } //necessary becuz of IAnimal ... } 在此下面我有Dog,Cat和Zebra类,从Animal继承并为其物种提供具体实现. 现在问
0 2024-04-21
编程技术问答社区
为什么我们要实现接口?
实现接口只需提供该方法的骨架即可.如果我们知道该方法的确切签名线,则在这种情况下 实现接口的要求是什么? 实现了接口 的情况 interface IMy { void X(); } public class My:IMy { public void X() { Console.WriteLine("Interface is implemented"); } } 这种情况尚未实现 public class My { public void X() { Console.WriteLine("No Interface is implemented "); } } My obj = new My(); obj.X(); 两种方法都会产生相同的结果. 实现接口的要求是什么? 解决方案 .net中有两个继承的目的: 允许派生的类共享共同功能的基础类实现 允许将衍生的类对象
0 2024-04-21
编程技术问答社区
如何通过反射获得类型的事件,忽略父接口上的事件
我有以下代码 Type type = ... var events=type.GetEvents( BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public).ToList(); 但是,这也使我宣布的事件在 父界接口.例如 两个 UIElement ContentElement 实施 IInputElement 定义事件 // // Summary: // Occurs when the mouse pointer moves while the mouse pointer is over the element. event MouseEventHandler PreviewMouseMove; 但是上面的呼吁将所有绑定标志设置为上述的getevents 返回界面的事件以及两个具体类. 如何过滤出从父界面上定义的
0 2024-04-21
编程技术问答社区
发现接口的依赖性
我接管了一个非常大的(> 2m sloc)软件项目的维护,全部用C#编写.文档很少.我现在想更改一个具有公共接口的模块(约400个),但是我不知道解决方案中所有其他模块(总数约为50个)可能使用此公共接口. 如何为这种情况创建接口依赖性用法树?代码库太大,无法简单地浏览项目资源管理器并读取源代码.您使用了哪些工具或方法来创建此类依赖关系分析树? 我不想购买任何工具.视觉工作室工具(例如课堂视图)似乎无法很好地处理此大小的项目.我已经考虑过写自己的sed/awk/perl-ish脚本,该脚本只需步行源代码并使用模式匹配来构建我自己的依赖性/接口useage数据库,但是如果有的话,我不想做些困难的方法一种简单的方法. 谢谢! 解决方案 您可能应该购买 ndepperiand .. 如果有另一个免费的工具可以提供类似的价值,我建议它.但是,我真的相信Ndepend是您最好的选择.有一个大小的代码库,一个400美元的工具就不会花很长时间. 其他解决方案 我
0 2024-04-21
编程技术问答社区
属性、接口、或抽象类
我想知道以下实现的一般建议是什么(属性,接口,抽象类或组合): /// /// Loads class specific information into a list for serialization. The class must extend PlugIn. /// The filenames parameter is passed from a FileDialog. /// /// Accepts any number of filenames with fully qualified paths. public static void ExtractPlugInData(params string[] filenames) { List l; foreach (string
0 2024-04-21
编程技术问答社区
在C#中,抽象类和接口类之间有什么不同?
c#? 中的摘要和接口类之间有什么不同 解决方案 接口不是类,只是合同定义了 public class 必须实施. 抽象类只是您无法创建实例的类.通常,您会使用它来定义一个基类,该基类定义某些虚拟用于实现的 derived 类的方法. 其他解决方案 而不是在这里写整个东西. 尝试 其他解决方案 类可以实现多个接口,但只能从一个抽象类继承. 抽象类可以为其方法提供实现.接口无法提供实现.
0 2024-04-21
编程技术问答社区
如何防止在更新一个接口后不得不更新所有的实现类?
我们有一个WPF应用程序,该应用程序主要是图表应用程序.大约有30个图表.每个图表在数据库中都有自己的表,该数据库保存图表的配置信息.每个图表中都有一个包含与图表相关的配置信息的类中的类. 我们在应用程序(IChartConfiguration)中都有一个接口,每个图表配置类都实现.它允许应用程序以一致且相似的方式使用任何特定的图表配置. 我们遇到的"问题"是,每次我们需要在接口中添加一个属性,对于添加我们尚未处理的新配置属性的新图表,我们必须返回到每个图表配置班级,这还没有实现此新属性(通常是其中大多数)并添加.满足接口实现.这并不是一个巨大的负担,但在我看来,必须有更好的方法来解决这个问题. 有更好的方法来处理此操作吗? 解决方案 您的问题位于其他地方,您所经历的"有问题的"行为根本不是问题. 这是接口的预期用途.通过实现您说的接口,"此类支持此界面".如果您不会更新所有实现该接口的类 您应该问自己的主要问题是您刚刚添加的配置属性是否对其他图表有意义.如果
0 2024-04-21
编程技术问答社区
C#调用一个接口方法的非虚拟实现
我是C#的新手,我不明白为什么编译器不抱怨此代码.这是类的层次结构: interface IAble { void f(); } class AAble : IAble { public void f() { Debug.Log("---->> A - Able"); } } class BAble : AAble { public void f() { Debug.Log("---->> B - Able"); } } 执行代码: IAble i = new BAble(); i.f(); 执行---->> A - Able打印.为什么?编译器如何知道应该称呼什么函数? 决定要调用什么函数的决定 - 运行时或编译时间?如果我de污新类class CAble : IAble? 解决方案 因为AAble正在实现IAble接口,其AAb
0 2024-04-20
编程技术问答社区
我可以将一个成员定义/约束为实现两个接口,而不使用泛型吗?
以下代码显示了我想做什么;也就是说,我想约束AnObject,以便可以用作使用iinterfaceone或iinterfacetwo的各种方法的参数,其中均未从另一个继承. public interface IInterfaceOne { } public interface IInterfaceTwo { } public class Implementation : IInterfaceOne, IInterfaceTwo { } public interface IInterfaceOneAndTwo : IInterfaceOne, IInterfaceTwo { } public class UsingImplementation { IInterfaceOneAndTwo anObject = (IInterfaceOneAndTwo)(new Implementation()); //fails because Implementation doesnt
0 2024-04-20
编程技术问答社区
使用Reflection.Emit来复制一个自定义属性到另一个方法上
我正在尝试基于现有接口生成一组新的WCF接口. 我正在使用reflection.mit名称空间来实现这一目标.我的问题是如何将旧的自定义属性从一种方法复制到新方法.我看到的每个示例setCustomatTributes()都需要事先了解属性类型.我需要在运行时发现属性类型.有什么想法吗? 解决方案 您发布的答案(frjames)已接近,但不考虑... ,例如... [ServiceBehavior(Name="ServiceName")] 然而,将自定义构成塔塔转换为自定义tributebuilder的想法用于反射. 我最终不得不为开源项目(AUTOFAC)这样做,并提出了这种扩展方法: public static CustomAttributeBuilder ToAttributeBuilder(this CustomAttributeData data) { if (data == null) { throw new ArgumentNul
0 2024-04-20
编程技术问答社区
C#中的接口冲突解决
这是一个基于我想知道为什么在以下特定情况下设计了C#语言无法检测正确的接口成员.我不是在看反馈,以这种方式设计课程是否被认为是最佳实践. class Turtle { } class Giraffe { } class Ark : IEnumerable, IEnumerable { public IEnumerator GetEnumerator() { yield break; } // explicit interface member 'IEnumerable.GetEnumerator' IEnumerator IEnumerable.GetEnumerator() { yield break; } // explicit interface member 'IEnumerable.GetEnumerat
0 2024-04-20
编程技术问答社区
类的继承,迫使新的类实现某些功能
好,所以我在处理几件事,特别是接口. 说我有一个与"动物"动物的"猫"类的"猫",其中有一种方法 public virtual void Walk() { // Do walking stuff } 所以猫会用: 覆盖它 public override void Walk() { // Do cat specific walking stuff } 简单吧? 这是我的问题,有没有办法强迫猫覆盖基本步行()方法?因此,如果另一个开发人员添加了狗课,他们将被迫实施自己的步行方法(即使只是base.walk())? ? 因此,接口解决了这一点,这就是我尝试的 猫:动物:界面 动物必须实施步行方法,但猫不是 猫:动物,界面 CAT必须实现步行方法,但是如果开发人员不添加或忘记"接口",则它将"破坏"它. 有人可以给我一些指针来解决这个问题吗? 谢谢. 编辑1 这是我的目标,我希望它使它变得更加清晰.
0 2024-04-20
编程技术问答社区
我对C#接口成员的默认访问修改器感到困惑
interface方法的访问修饰符是什么?它应该是public或protected,因为您可以在实现它们时访问它们(这很有意义).它也应该是abstract,因为他们没有实施.但是最近,我一直在阅读一本书,名为 clr通过c#,有关接口的章节说以下 CLR要求将interface方法标记为virtual.如果您不明确将方法标记为源代码中的virtual,则编译器将方法标记为virtual和sealed. . 在标记interface成员virtual编译器时,请抱怨无效的访问修饰符.我的意思是,没有访问修改器对interface中的任何内容有效,而不是编译器给他们的默认一个有效吗?谁能为我清楚吗? 解决方案 Interfaces(C#编程指南) 接口可以包含方法,属性,事件,索引或任何 这四种会员类型的组合.有关示例的链接,请参见 相关部分.接口不能包含常数,字段, 运算符,实例构造函数,破坏者或类型. 接口 成员自动公开,他们不能包括任何访问权限 修饰符.成员也
0 2024-04-20
编程技术问答社区
C# 接口。是否可以在接口本身中指代实现接口的类型?
我基本上希望做的是设计一个通用接口,该界面在实现时会导致类似于T的类,除了它具有一些其他功能.这是我在说什么的示例: public interface ICoolInterface { T Value { get; set; } T DoSomethingCool(); } public class CoolInt : ICoolInterface { private int _value; public CoolInt(int value) { _value = value; } public int Value { get { return _value; } set { _value = value; } } public int DoSomethingCool() { return _value *
0 2024-04-20
编程技术问答社区
你能在一个实际的例子中帮助我理解抽象类与接口的用法吗?
您能否给我对抽象类与继承使用和帮助我的几乎过于简单的理解,以便我可以真正理解该概念以及如何实施?我有一个正在尝试完成的项目,并且对如何实施感到迷失.我一直在和我的教授聊天,并被告知很多,说如果我不知道,我可能还没有准备好这门课程.我已经过度编写了前准则课程,并且仍然难以理解这些概念. 澄清,到目前为止我所做的项目都在下面.我还没有狗/猫课等.你能给我一个指针吗?我不是要任何人给我"答案".我只是迷失在去哪里.我参加在线课程,他与我的沟通工作令人不安.我刚刚完成了所有其他课程的4.0,所以我愿意付出努力,但是我在理解这些概念以及如何实际应用它们的理解中迷失了方向. 有任何评论或帮助,可以让我在这个项目中进步? 我要实现的描述如下: 概述: 本练习的目的是 演示使用接口, 继承,抽象类和 多态性.您的任务是 提供的程序外壳,添加 适当的课程和相应的课程 班级成员/方法 程序以正常运行.您可以 不更改任何代码 提供的,您只能添加课程 你写.虽然有 获取程序的许多方
0 2024-04-20
编程技术问答社区
为什么要实现IEquatable<T>接口
我一直在阅读文章并在一定程度上理解界面,但是,如果我想纠正自己的自定义平等方法,似乎我可以在不实现Iqualable界面的情况下执行此操作.一个例子. using System; using System.Collections; using System.ComponentModel; namespace ProviderJSONConverter.Data.Components { public class Address : IEquatable { public string address { get; set; } [DefaultValue("")] public string address_2 { get; set; } public string city { get; set; } public string state { get; set;
0 2024-04-20
编程技术问答社区