5

我正在阅读这个,并注意到问题中的第二点:

另一位面试官问我,如果你在接口中有一个公共变量,那与抽象类有什么不同?我坚持你不能在接口内有一个公共变量。我不知道他想听什么,但他也不满意。

我阅读了答案,但似乎都没有澄清这一点,除了:

对于.Net,

你对第二个面试官的回答也是对第一个面试官的回答......抽象类可以有实现,AND状态,接口不能......

我认为面试官的回答是正确的,因为你不能在界面内有任何变量。我在这里有点困惑。有人可以澄清吗?我的问题是,为什么面试官会问这样一个奇怪的(?)问题?

4

2 回答 2

8

所有接口成员都是隐式的 public,这就是为什么你不能public在接口中使用属性或方法。

接口 C# - MSDN

接口成员是自动公开的,它们不能包含任何访问修饰符。成员也不能是静态的。

对于您的问题:

我认为面试官的回答是正确的,因为你不能在界面内有任何变量。

不可以。您可以在界面中定义属性。就像是:

interface ITest
{
    int MyProperty { get; set; }
}

public class TestClass : ITest
{
    public int MyProperty
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }
}

编辑:

另一位面试官问我,如果你在接口中有一个公共变量,那与抽象类有什么不同?

可能面试官想看看你是否会说接口中的所有成员默认都是公共的,而在抽象类中你可以有私有的、受保护的、公共的成员等。

于 2013-05-16T04:34:37.220 回答
0

只是为了添加到 Habib 的答案中,接口中的所有内容都是公共的,因为将某些东西设为私有实际上没有任何意义,因为其中不能有任何实现,永远不会使用私有成员,它可以'不被使用,因为没有什么可以使用它。

我想这是一个你需要详细说明的问题,我想说,这根本不是一个坏问题。

于 2013-05-16T04:41:05.710 回答