设置接口属性的默认值?

发布于 2024-12-09 15:24:46 字数 78 浏览 0 评论 0原文

我有一个包含一个属性的接口。我需要设置该属性的默认值。怎么办呢?在接口中为属性设置默认值也是一种好的做法吗?或者这里使用抽象类是一个合适的类?

I have an Interface which contains one property. I need to set the default value for that property. How to do that?. Also is it good practice to have a default value for a property in Interface? or here using an abstract class instead is a apt one?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

情独悲 2024-12-16 15:24:46

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

除了接口之外还使用抽象类(它只设置默认值,不实现其他任何内容):

    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() { }
    }

You can't set a default value to a property of an interface.

Use abstract class in addition to the interface (which only sets the default value and doesn't implement anything else):

    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() { }
    }
黑白记忆 2024-12-16 15:24:46

接口不包含实现。他们所做的只是州议员签名。

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

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

Interfaces contain no implementation. All they do is state member signatures.

An implementation of an interface is free to have whatever default value it likes for any property.

E.g. an abstract class can return a default value for any of it's properties.

迷荒 2024-12-16 15:24:46

这对于静态字段是可能的。因为接口不能包含实例字段。静态字段不是实例字段。

或者您可以使用文字值。例如,我在下面的界面中使用 Age 属性。

public interface IMyDefault
{
    private static string _name = "Yusif";

    // Has default implementation
    string Name
    {
        get
        {
            return _name;
        }

        set
        {
            _name = value;
        }
    }

    int Age { get => 18; }

    // Hasn't default implementation
    string Surname { get; set; }
}

public class MyDefault : IMyDefault
{

    // We only implement Surname in MyDefault.cs
    public string Surname { get; set; }
}

但是,只有在将对象转换为接口之后,您才能访问默认实现的属性。

例如:

下面的代码不会编译

MyDefault myDefault1 = new MyDefault();

Console.WriteLine(myDefault1.Name);

下面的代码将会编译

IMyDefault myDefault2 = new MyDefault();

Console.WriteLine(myDefault2.Name);

This is possible with static fields.Because, interfaces cannot contains instance fields. Static fields are not instance fields.

Or you can use literal values. For example, I use Age property in interface below.

public interface IMyDefault
{
    private static string _name = "Yusif";

    // Has default implementation
    string Name
    {
        get
        {
            return _name;
        }

        set
        {
            _name = value;
        }
    }

    int Age { get => 18; }

    // Hasn't default implementation
    string Surname { get; set; }
}

public class MyDefault : IMyDefault
{

    // We only implement Surname in MyDefault.cs
    public string Surname { get; set; }
}

But, you can access default implemented properties only after cast object to interface.

For example:

Code below will not compile

MyDefault myDefault1 = new MyDefault();

Console.WriteLine(myDefault1.Name);

Code below will compile

IMyDefault myDefault2 = new MyDefault();

Console.WriteLine(myDefault2.Name);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文