如何实现接口属性而不将其暴露在派生类的外部

时间:2019-09-06 03:16:36

标签: c# oop inheritance interface

道歉是菜鸟问题。

我在将接口属性实现为私有时遇到麻烦。我不想将其公开给派生类。

也许我使用的接口/属性错误。请引导我。

我在派生类中将该属性设置为私有。 我也尝试在界面中使用字段。

示例1:在派生类中设置为私有。

interface IHeader
{
    string title {get; set;}
}

class Head1 : IHeader
{
    private string title {get; set;}
}

示例2:设置为字段。

interface IHeader
{
    string title;
}

class Head1 : IHeader
{
    private string title;
}

```


Error message 1: '<class>' cannot implement an interface member because it is not public.

Error message 2: Interface cannot contain fields.

(Error message 2 was obvious to me).

1 个答案:

答案 0 :(得分:0)

如果将接口设置为内部并显式实现接口,则会将那些属性隐藏在程序集之外。

internal interface IHeader
{
    string title { get; set; }
}

class Head1 : IHeader
{
    string IHeader.title { get; set; }
}

根据您的要求,可能会有更好的选择,但尚不清楚。抽象类是一个选项,或者将Head1封装在面向公众的服务类中是另一种选择。

在这种情况下,抽象类选项可能更合适。

abstract class HeaderAbs
{
    protected string title { get; set; }
}

class Head1 : HeaderAbs
{
    // You can access title from Head1 class but not from outside
}