当前位置:  开发笔记 > 编程语言 > 正文

为什么接口允许在接口中声明状态?

如何解决《为什么接口允许在接口中声明状态?》经验,为你挑选了2个好方法。

根据为什么我们不允许在接口中指定构造函数的答案?,

因为接口描述了行为.构造函数不是行为.如何构建对象是一个实现细节.

如果interface描述行为,为什么interface允许声明状态

public interface IStateBag
{
    object State { get; }
}

Andrew Hare.. 11

嗯 - 它不是真正的状态.如果接口允许您声明字段,那么这将是状态.由于属性只是get和set方法的语法糖,因此允许使用.

这是一个例子:

interface IFoo
{
    Object Foo { get; set; }
}

先前的接口被编译为以下IL:

.class private interface abstract auto ansi IFoo
{
    .property instance object Foo
    {
        .get instance object IFoo::get_Foo()
        .set instance void IFoo::set_Foo(object)
    }
}

如您所见,即使接口将属性视为方法.



1> Andrew Hare..:

嗯 - 它不是真正的状态.如果接口允许您声明字段,那么这将是状态.由于属性只是get和set方法的语法糖,因此允许使用.

这是一个例子:

interface IFoo
{
    Object Foo { get; set; }
}

先前的接口被编译为以下IL:

.class private interface abstract auto ansi IFoo
{
    .property instance object Foo
    {
        .get instance object IFoo::get_Foo()
        .set instance void IFoo::set_Foo(object)
    }
}

如您所见,即使接口将属性视为方法.



2> Marc Gravell..:

属性不是实现.例如,您无法定义字段.属性和事件实际上只是特殊的方法模式; 使用属性它是"get_"和"set_",并使用事件"add_"和"remove_".

所以这只是一种方法.

推荐阅读
放ch养奶牛
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有