Tag: 界面

C#中最常用的接口是什么?

我尝试在C#中搜索最常用的内置接口,但找不到文章,所以我想我们可以回顾一下。 我们在答案中使用以下约定: IinterfaceName1:为此 IinterfaceName2:为此

如何在C#中覆盖接口的等于运算符==?

我已经定义了以下界面 public interface IHaveAProblem { string Issue { get; set; } } 这是IHaveAProblem的实现 public class SomeProblem : IHaveAProblem { public string Issue { get; set; } public override bool Equals(object obj) { SomeProblem otherObj = obj as SomeProblem; if (otherObj == null) { return false; } return this.Issue == otherObj.Issue; } public override int GetHashCode() […]

没有任何成员的界面 – 不好的做法?

可能重复: 标记界面的目的是什么? 创建一个完全空的界面是不好的做法,例如: public interface ISomething { } 在某种情况下,我希望以不同于其他对象的方式处理某些对象,但我不需要任何新的行为。

Linq上下文对象未注册为System.IDisposable对象的类型

我正在尝试在using语句中使用我的’context’对象。 它适用于一个项目,但另一个项目,我收到以下错误。 ‘…’:在using语句中使用的类型必须可以隐式转换为’System.IDisposable’ 当我指的是’context’对象时,我指的是当你使用LINQ to SQL时自动创建的对象。 我正在工作的类,实现另一个接口,可能是搞砸了这个上下文对象? using (TGDC context = new TGDC()) { } 这个单词 运用 它下面有红色的斜线(错误)。

C#转换inheritance的通用接口

我遇到了一些麻烦,让我开始构建一个我想出的界面。 这是C#Windows Forms的MVP设计。 我有一个IView类,我在我的表单类上实现。 还有一个IPresenter,我将其导入各种特定的演示者。 每个Presenter将根据角色以不同方式管理IView,例如打开对话框以使用AddPresenter输入新数据集,而不是使用EditPresenter编辑现有数据,EditPresenter会将数据预加载到表单上。 每个都inheritance自IPresenter。 我想这样使用代码: AddPresenter pres = new AddPresenter(); 我基本上有这个工作,但这些演示者和他们管理的视图被捆绑到运行时加载的插件,这意味着我需要一个作为插件接口的Manager类采用“模式”参数。 此模式参数用于工厂方法来创建“添加”或“编辑演示者”,但由于稍后会调用显示对话框,因此我需要通过IPresenter接口进行调用,如下所示: private IPresenter pres; public ShowTheForm() { pres.ShowDialog(); } 现在,我遇到的问题是将AddPresenter的具体实例表示为’pres’成员。 这是我所拥有的简化版本: interface IView { void ViewBlah(); } interface IPresenter where V : IView { void PresBlah(); } class CView : IView { public void ViewBlah() { } } class CPresenter : […]

c#中的接口属性副本

我已经和C#合作多年了,但是刚刚碰到这个问题让我很难过,而且我真的不知道如何提出这个问题,所以,举个例子吧! public interface IAddress { string Address1 { get; set; } string Address2 { get; set; } string City { get; set; } … } public class Home : IAddress { // IAddress members } public class Work : IAddress { // IAddress members } 我的问题是,我想将IAddress属性的值从一个类复制到另一个类。 这可能是在一个简单的单行语句中还是我仍然需要对每个语句进行属性到属性的分配? 我真的很惊讶这个看似简单的东西让我感到困惑……如果不可能以简洁的方式,有没有人有任何捷径他们用来做这种事情? 谢谢!

C#:返回在运行时确定具体类型的对象的方法?

我正在考虑设计一个方法,该方法将返回一个实现接口的对象,但其具体类型在运行时才会知道。 比如假设: ICar Ford implements ICar Bmw implements ICar Toyota implements ICar public ICar GetCarByPerson(int personId) 我们不知道在运行之前我们会得到什么车。 a)我想知道这个人有什么类型的汽车。 b)根据我们得到的具体汽车类型,我们将调用不同的方法(因为某些方法只对类有意义)。 所以客户端代码会做类似的事情。 ICar car = GetCarByPerson(personId); if ( car is Bmw ) { ((Bmw)car).BmwSpecificMethod(); } else if (car is Toyota) { ((Toyota)car).ToyotaSpecificMethod(); } 这是一个很好的设计吗? 有代码味吗? 有一个更好的方法吗? 我很好用返回接口的方法,如果客户端代码显然调用接口方法,那就没问题了。 但我担心的是客户端代码转换为具体类型是否是好的设计。

如何通过C#中的接口实现事件?

我有一个问题:想象一下我有一个基于插件的系统。 我需要某种接口,我可以从每个插件中捕获事件,例如实现IReporting接口。 (IReporting) object.OnSomeEvent += 但我找不到办法做到这一点。

在C#中,如果我的对象支持该接口,我如何检查T是否为IInterface类型并转换为该类型?

在C#中,我有一个使用generics传入T的函数,我想运行检查以查看T是否是实现interface的object ,如果是,则调用该interface上的methods之一。 我不希望T约束只是那个Type。 是否有可能做到这一点? 例如: public class MyModel : IModel where T : MyObjectBase { public IQueryable GetRecords() { var entities = Repository.Query(); if (typeof(IFilterable).IsAssignableFrom(typeof(T))) { //Filterme is a method that takes in IEnumerable entities = FilterMe(entities)); } return entities; } public IEnumerable FilterMe(IEnumerable linked) where TResult : IFilterable { var dict = GetDict(); return […]

如何为接口定义索引器行为?

是否可以从接口添加索引器行为? 像这样的东西: interface IIndexable { T this[string index]; }