Tag: 接口

在C#中的界面内使用时,’new’关键字的含义是什么?

开发一个通用的接口我希望在一个接口中声明一个构造函数,但它说那里禁止构造函数。 我试图声明一个静态工厂方法,但它说不允许使用静态方法,并建议使用’new’关键字。 但我几乎不知道在C#中使用界面时,’new’关键字究竟意味着什么。 你呢? 更新: 我没有发布任何示例代码,因为我不想混合2个问题 – 如何在界面中指定构造函数/工厂以及’new’关键字在接口中的含义。 II甚至只被强制指定第一部分因为StackOverflow不接受纯粹forms的第二个问题,说它不符合质量标准。 但是,正如你所要求的那样,我将对我试图实现的目标进行抽样: Interface IMyInterface { IMyInterface (T, U, U); // OR static IMyInterface GetNewIMyInterface (T, U, U); } 我只是希望每个派生类都实现这样的构造函数。

用于公开通用接口的非generics版本的模式

假设我有以下界面来显示分页列表 public interface IPagedList { IEnumerable PageResults { get; } int CurrentPageIndex { get; } int TotalRecordCount { get; } int TotalPageCount { get; } int PageSize { get; } } 现在我想创建一个分页控件 public class PagedListPager { public PagedListPager(IPagedList list) { _list = list; } public void RenderPager() { for (int i = 1; i < […]

与同一接口列表的接口

我有以下界面: public interface IObject{ double x {get;} double y {get;} List List{get; set;} } 和这堂课 public class Holder where T : IObject { private T myItem; public void ChangeItemList(T item){ myItem.List = item.List; } 但是编译器不喜欢ChangeItemList方法并且在这一行: myItem.List = item.List; 给我这个错误: Cannot convert source type ‘List’ to target type ‘List’ 为什么我不能这样做,这个场景有什么好的解决方案? 谢谢

接口的XML序列化

我需要在项目中序列化复杂对象并将它们放在数据库中。 我想使用XML序列化它们,以便更轻松地调试我的应用程序。 我的情况与本文中描述的情况非常相似: http : //geekswithblogs.net/SoftwareDoneRight/archive/2008/01/16/how-to-serialize-an-interface-using-the-xmlserializer.aspx 所以我有一个包含Property的对象,该类型由接口定义。 然后我有不同的具体类型来实现它。 按照文章方法,使用XmlInclude属性,我获得了一个强大的耦合解决方案,但我的应用程序结构化使用插件方法,所以我可以有我想要的界面实现这么多的实现。 有没有办法使用xml序列化解决我的问题,或者我必须使用二进制序列化?

委托和界面如何可以互换使用?

我可以使用接口方法而不是委托吗? 怎么样? 我发现搜索接口方法比使用委托更快。 我会很感激一个简单的代码片段。

访问接口方法而不引用类

假设我在一个名为“Interface”的项目中有这样的接口: public interface TestInterface { string Operation(); } 和实现它的类。 该类位于另一个项目“Class”中: public class TestClass : TestInterface { public TestClass() { } public string Operation() { return “This is an Operation”; } } 我的客户做了类似这样的事情(这又是一个不同的项目“客户”): class Program { static void Main(string[] args) { TestInterface i = new TestClass(); i.Operation(); } } 我的问题与这一行有关: TestInterface i = new TestClass(); 通过添加这一行,我实际上被迫在我的“客户端”项目中添加对“接口”和“类”项目的引用。 […]

类型不能在generics类型或方法中用作类型参数“T” – 为什么?

我正在尝试从接口inheritance两个不同的模型。 这些模型应该作为List或Collection传递给Method。 现在我收到此错误消息: The type ‘InheritanceTest.FooModel’ cannot be used as type parameter ‘T’ in the generic type or method ‘InheritanceTest.Service.DoSomethingWith(System.Collections.Generic.IEnumerable)’. There is no implicit reference conversion from ‘InheritanceTest.FooModel’ to ‘InheritanceTest.IModel’. C:\Work\InheritanceTest\InheritanceTest\Program.cs 14 13 InheritanceTest 有人可以解释一下,我做错了什么? :d 演示代码: interface IModel where T : IModelItem { string Name { get; set; } IEnumerable Items { get; set; […]

为什么我的视图模型不能与实现接口的通用ViewModel绑定? (ASP.NET MVC 3)

我正试图通过我的View传递以下ViewModel的实例: public class CompanyListViewModel where T : ICompany { public IEnumerable CompanyList; public IEnumerable StateList; public CompanyListViewModel(IEnumerable list) { CompanyList = list; } } View采用的方式如下: @model Project.ViewModels.CompanyViewModels.CompanyListViewModel 我的控制器代码将这样的内容传递给View: CompanyListViewModel model = new CompanyListViewModel(_companyService.FilterByCompanyState(state)); ICompanyInListAsUser接口实现ICompany接口的位置。 _companyService.FilterByCompanyState(state))类返回一个IEnumerable Company对象,后者又实现了ICompanyInListAsUser接口。 出于某种原因,访问我的视图时收到以下错误: The model item passed into the dictionary is of type ‘Project.ViewModels.CompanyViewModels.CompanyListViewModel`1[Project.ViewModels.CompanyViewModels.ICompanyInListAsUser]’, but this dictionary requires a model item […]

如何在C#中调用特定的显式声明的接口方法

我对如何在以下代码中调用特定接口的方法(Say IA或IB或In …)有疑问。 请帮我解决如何打电话。 我已经注释了代码行,我声明了接口方法“public”,在这种情况下它可以工作。 当我明确宣布时,我不知道如何调用它:(我正在学习C#…. interface IA { void Display(); } interface IB { void Display(); } class Model : IA, IB { void IA.Display() { Console.WriteLine(“I am from A”); } void IB.Display() { Console.WriteLine(“I am from B”); } //public void Display() //{ // Console.WriteLine(“I am from the class method”); //} static void Main() […]

如果方法返回一个接口,它意味着什么?

我看到很多方法将接口指定为返回值。 我的想法是真的,这意味着:我的方法可以返回从该接口inheritance的每个类类型? 如果没有,请给我一个很好的答案。