如果我想强制派生接口的用户实现私有方法/属性,有啥技巧吗?

Posted

技术标签:

【中文标题】如果我想强制派生接口的用户实现私有方法/属性,有啥技巧吗?【英文标题】:If I want to force users deriving an Interface to implement a private method/property, is there some trick?如果我想强制派生接口的用户实现私有方法/属性,有什么技巧吗? 【发布时间】:2011-05-20 09:10:19 【问题描述】:

如果我想强制派生接口的用户实现私有方法,有什么技巧吗?

似乎我应该能够做一些事情来达到以下效果:

namespace cc

    interface Icd
    
        int one  get; private set; 
        int two  get; private set; 
    

我明白为什么这不起作用,接口毕竟是从它派生的对象的有保证的公共前端,但是,必须有一种方法可以强制实现我的接口的编码人员必须私下实现 setter。

在这种情况下抽象类会起作用吗?我不想定义代码,只是强制实现我的接口的人实现属性的私有设置器。

编辑:是的,这是 C# :-)

【问题讨论】:

这是 C# 吗?如果我们知道什么语言,我们也许可以想出一个超级熟练的语言特定“解决方案”。 是的,C#,抱歉应该指定 再想一想,这里的用例是什么?接口没有代码,任何使用该接口的人都不能调用私有方法。这与简单地省略 set 有何不同? @Ken:强制属性为只读。 是的,你是对的,我只是在问之前没有正确考虑这一点。 【参考方案1】:

您无法控制属性的实现。时期。强迫他们将 setter 设为私有是没有意义的,接口的任何消费者都不能调用它。声明一个无论如何都不能调用的 setter 是没有意义的,还不如省略它。现在它确实工作了,没有设置器可以调用。这很私密。

【讨论】:

【参考方案2】:

使用抽象基类而不是接口:

public abstract class Foo

    public abstract int MyProperty  get; protected set; 

【讨论】:

【参考方案3】:

如果它是私有的,那么您似乎真正有兴趣控制的是一些公司内部的代码编写约定或类似的东西。也许您真正想要查看的是您的版本控制软件中会拒绝不遵守规则的提交的内容?

【讨论】:

以上是关于如果我想强制派生接口的用户实现私有方法/属性,有啥技巧吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何实现具有公共属性但私有设置方法的多个接口?

c ++中受保护的派生和私有派生有啥区别[重复]

c#接口公共私有[重复]

java 面向对象的三大特性

java中接口和类有啥区别 java中接口和类有啥区别

java中私有的属性、静态成员可以被子类继承吗?