C#接口(interface)问题

标签 c# interface

出于某种原因,我遇到了接口(interface)问题。我知道已经发布了 100 个示例,但显然我不够聪明,无法弄清楚...

我有以下界面:

namespace DocStore.Interfaces
{
  public interface IResetCategoryControl
  {
    string CategoryToAdd { set; }
  }
}

我想将 CategoryToAdd 设置为一个值。

这是我想要设置的类(class)以及目前我拥有的类(class):

  public partial class AddDocumentsDialog : IResetCategoryControl

    public string CategoryToAdd
    {
      set
      {
        IResetCategoryControl() ireset = new IResetCategoryControl();
        ireset.CategoryToAdd = value;       
      }
    }
  }

我在 AddDocumentDialog 类中做错了什么?我无法让那部分工作。

谢谢!

埃洛克

最佳答案

我不确定你想在你的 setter 中做什么......但下面这行给你带来了问题:

IResetCategoryControl() ireset = new IResetCategoryControl();

首先,声明变量类型时不要使用括号。其次,您不能直接实例化接口(interface)的实例。为了使该声明有效,它必须符合以下内容:

IResetCategoryControl iReset = new SomeConcreteResetCategoryControl();

还有一个更大的问题:

从理论上讲,您的类正在实现该接口(interface),该接口(interface)指定您需要一个名为 CategoryToAdd 的属性和一个公共(public) setter 。该属性应该在您的类上设置值...而不是另一个类的新实例。

我希望代码看起来像这样:

public partial class AddDocumentsDialog : IResetCategoryControl
{
    private string categoryToAdd;

    public string CategoryToAdd
    {
        set
        {
            // do some logic to validate the value
            categoryToAdd = value;
        }
    }
}

您可能还想重新考虑您的界面设计,因为通常不鼓励仅设置属性(赞成使用方法,因为仅设置属性表示正在执行一定数量的逻辑并且该值仅由类而不是被消费者再次访问)。

关于C#接口(interface)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4087975/

相关文章:

linq-to-sql - Entity Framework 是否比 Linq2Sql 更可模拟?

javascript - 结合 Matlab 和 JavaScript : Methods of integration?

c# - 使用 .NET 以编程方式将第二个进程附加到 VS2010

c# - Asp.net c# 中的偏移 div 元素

c# - Autofac:注册依赖于其他类的特定实例的类

delphi - 关于给接口(interface)分配GUID的问题

objective-c - Property & Private & Extended Class组合接口(interface)困惑

c# - 如何读取 RESX 文件值字段中的文件名

c# - Encog 框架没有给出可接受的错误率

c# - 由于具体类和接口(interface)没有匹配 IEnumerable<T> 和 List<T> 的返回类型而导致的错误