Tag: 接口

为什么IList 。Reverse()不像List ()那样工作。反向

我有List.Reverse()和Reverse(this IEnumerable source) 。 看看代码: // Part 1 List list = new List { 1, 2, 3 }; foreach (int x in list) Console.Write(x); Console.WriteLine(); list.Reverse(); foreach (int x in list) Console.Write(x); Console.WriteLine(); list.Reverse(); // Part2 IList ilist = list; foreach (int x in list) Console.Write(x); Console.WriteLine(); ilist.Reverse(); foreach (int x in ilist) Console.Write(x); Console.WriteLine(); […]

为什么带有“where T:class”约束的Generic 方法接受接口

我有这个interface : public interface ITestInterface { int TestInt { get; set; } } 和这个generics方法(带有T : class约束): public void Test() where T : class { // DoSomething } 这个电话: Test(); 当interface 不是一个class (或者它是什么?)时,一切都编译并运行。 为什么会这样? 我第一次在我的WCF代理类上看到这个: public partial class TestServiceClient: System.ServiceModel.ClientBase, TestNamespace.ITestService ClientBase具有此定义: public abstract class ClientBase : ICommunicationObject, IDisposable where TChannel : class

类型参数“T”与外部类型“…”中的类型参数同名

public abstract class EntityBase { … } public interface IFoobar { void Foo(int x) where T : EntityBase, new(); } public interface IFoobar where T : EntityBase, new() { void Foo(int x); } public class Foobar : IFoobar, IFoobar where T : EntityBase, new() { public void Foo(int x) { … } void IFoobar.Foo(int x) […]

处理部分类,inheritance和Visual Studio生成代码时,在何处放置通用接口方法

考虑这种情况: 我们有两个由Visual Studio生成的类,例如Typed Dataset Rows。 这些类派生自一个我们无法改变的公共基类。 我们不能更改这些子类派生的类,但它们是作为部分类生成的,因此我们可以扩展它们。 现在我们决定为这两个类实现一个定义一些常用方法的接口,但这两个类的方法将以完全相同的方式实现。 放置这些方法的最佳位置在哪里,以便我们不会两次编写相同的代码。 我可以在一些辅助类或全局类中使用代码,但似乎应该有更好的方法。 这是一个快速代码示例: public interface ICommonInterface { void SomeMethod(int x); } // we cannot change what is in the base class and we cannot derive Child1 or Child2 from // a different base class, because they are partial classes generated by Visual Studio // we can extend […]

如何获得ProblemBase 的列表?

可能重复: 如何创建从具有不同类型的相同generics类inheritance的对象列表? 我正在使用几个从抽象类inheritance的对象。 但是要使用抽象类必须声明一个通用数据类型。 我遇到了问题,因为我需要一个包含ProblemBase列表的列表,尽管每个列表包含不同的TResult数据类型。 public abstract class ProblemBase { TResult[] Array; } 我想获得Array属性。 那就是问题所在。

使用接口名称创建类实例的概念是什么?

什么是set变量或对象的概念,或者我不知道当我创建类的实例并将左侧接口名称放入时调用它,我知道我们不能创建类型接口的对象。 当我声明这些类型的对象时,我只需要更多地澄清这个过程命名的内容或.Net所做的细节是什么。 IDataReader oSQLReader = new SqlDataReader(); IDataReader oOLEReader = new OleDbDataReader();

如何创建一个接口,使一些方法保持在C#中进行测试?

考虑以下课程 public class Entity { public void Foo() { … } internal void Bar() { … } } 如您所见,它有一个public方法和一个internal方法。 现在,我想创建一个接口,允许我在测试中模拟这个类(在这个程序集和其他程序集中)。 我重写我的代码如下: public interface IEntity { void Foo(); } internal class Entity : IEntity { public void Foo() { … } public void Bar() { … } } 但是,这会产生另一个问题。 当在同一个程序集中的另一个方法中使用该类时,我不能再调用Bar : public class OtherClass { public […]

为什么我们必须命名接口方法参数?

在C#中,我们必须命名接口方法的参数。 我明白,即使我们没有这样做,这样做也会有助于读者理解其含义,但在某些情况下,并不是真的需要: interface IRenderable { void Render(GameTime); } 我会说上面的内容与下面一样可读且有意义: interface IRenderable { void Render(GameTime gameTime); } 是否需要一些技术原因来说明接口上方法参数的名称? 值得注意的是,接口方法的实现可以使用与接口方法中的名称不同的名称。

将set访问器添加到类中的属性,该类派生自仅具有get访问器的抽象类

我有一个抽象类, AbsClass实现了一个接口, IClass 。 IClass有几个属性,只有Get访问者。 AbsClass将IClass的属性实现为要在从AbsClass派生的类中定义的抽象属性。 因此,从AbsClass派生的所有类也需要通过与Get访问器具有相同的属性来满足IClass 。 但是,在某些情况下,我希望能够从IClass向属性添加set访问器 。 然而,如果我尝试使用set访问器覆盖AbsClass中的抽象属性,我会收到此错误 ConcClassA.Bottom.Set无法覆盖,因为AbsClass.Bottom没有可覆盖的set访问器 请参阅下面的ConcClassA 。 如果我有一个只实现IClass接口但没有inheritance自AbsClass的类,那么我可以添加一个没有问题的set访问器。 请参阅下面的ConcClassB 。 我可以在AbsClass的每个派生中实现IClass,而不是直接为AbsClass实现。 但我从我的设计中知道每个AbsClass也需要一个IClass,所以我宁愿在层次结构中指定更高的值。 public interface IClass { double Top { get; } double Bottom { get; } } abstract class AbsClass:IClass { public abstract double Top { get; } public abstract double Bottom { get; } } class ConcClassA […]

如何序列化具有接口作为属性的对象?

我有2个接口IA和IB。 public interface IA { IB InterfaceB { get; set; } } public interface IB { IA InterfaceA { get; set; } void SetIA(IA value); } 每个接口引用另一个。 我正在尝试按以下定义序列化ClassA。 [Serializable] public class ClassA : IA { public IB InterfaceB { get; set; } public ClassA() { // Call outside function to get Interface B IB interfaceB […]