为接口属性设置默认值?

10

我有一个接口,其中包含一个属性。我需要设置该属性的默认值。如何做到这一点?还有,在接口中为属性设置默认值是一种好的实践吗?还是在这里使用抽象类更合适?

3个回答

12

你无法为接口的属性设置默认值。

可以在接口之外使用抽象类(它只设置默认值,不实现其他内容):

    public interface IA {
        int Prop { get; }

        void F();
    }

    public abstract class ABase : IA {
        public virtual int Prop
        {
            get { return 0; }
        }

        public abstract void F();
    }

    public class A : ABase
    {
        public override void F() { }
    }

1
Petar,使用抽象类除了接口意味着我应该将接口改为抽象类吗? - Mohan Kumar
1
不,它的意思是使用实现接口的抽象类,然后进行扩展。 - Petar Ivanov

10

这似乎不包括默认属性值,但它包括默认属性实现。 - Dave Cousineau

1

接口不包含任何实现,它们只声明成员签名。

接口的实现可以针对任何属性自由设置默认值。

例如,抽象类可以为其任何属性返回默认值。


句子“接口不包含实现。”现在已经无效:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/proposals/csharp-8.0/default-interface-methods#concrete-methods-in-interfaces - derekbaker783
1
可以,但我不会回去更新旧答案。它们有时间戳,编程语言的后续版本也是如此。 - Adam Ralph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接