用于创建可选属性的 C# 接口(interface)

标签 c# interface

我有一个用 C# 编写的接口(interface),它是否已经由类实现了。是否可以在不修改现有已实现类的情况下,在接口(interface)中再添加一个属性作为可选属性?

例如

public interface IShape
{
    int area { get; }
}

public class FindWindow : IShape
{
    public int area
    {
        get
        {
            return 10;
        }
    }
}

在这个FindWindow中已经写好了。是否可以添加一个可选属性而不在现有类中实现。

即,

public interface IShape
{
    int area { get; }
    //optional
    //string WindowName{get;}
}

public class FindWindow : IShape
{
    public int area
    {
        get
        {
            return 10;
        }
    }

    //WindowName i am not implementing here
}

public class FindWindowName : IShape
{
    public int area
    {
        get { return 20; }
    }

    public string WindowName
    {
        get { return "Stack Overflow"; }
    }
}

最佳答案

没有接口(interface)可选成员的概念。

这里需要定义两个接口(interface)。一个包含区域,另一个包含WindowName。像这样:

public interface IShape
{
    int area { get; }
}

public interface IFindWindow: IShape
{
    string WindowName { get; }
}

然后实现类可以选择实现IShapeIFindWindow

在运行时,您只需使用 is 运算符来确定 IFindWindow 是否由手头的对象实现。

IShape shape = ...;
if (shape is IFindWindow)
    ....

要实际使用更派生的接口(interface),请使用 as 运算符:

IShape shape = ...;
IFindWindow findWindow = shape as IFindWindow;
if (findWindow != null)
    string windowName = findWindow.WindowName;

关于用于创建可选属性的 C# 接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17855037/

相关文章:

dependency-injection - MEF 和单独的接口(interface)组件导致 "Interface for every class"

c# - 生成一个强类型代理,当一个属性设置为另一个属性时,它可以跟踪属性名称而不是值的变化

c# - 如何从 MVC4 中的 View 编辑父项的属性?

c# - 将 cookie 设置为 WebView 控件

java - 支持私有(private)接口(interface)方法

interface - 我如何在 ClearOS(基于 CentOS)中使用界面 pre-up/post-up/pre-down/post-down?

c# - C# 中的实现差异

c# - 为什么 Resharper 代码清理会在 ascx 文件中添加不必要的导入命名空间?

java - 如何使用固定宽高比 View 膨胀扩展 View

c# - viewModel之间使用MVVM方式的接口(interface)进行通信