设置接口属性的默认值?
我有一个包含一个属性的接口。我需要设置该属性的默认值。怎么办呢?在接口中为属性设置默认值也是一种好的做法吗?或者这里使用抽象类是一个合适的类?
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您无法为接口的属性设置默认值。
除了接口之外还使用抽象类(它只设置默认值,不实现其他任何内容):
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):
使用 C#8,接口可以有默认实现。
https://devblogs.microsoft.com/dotnet/default-implementations-in-接口/
With C#8, interfaces can have a default implementation.
https://devblogs.microsoft.com/dotnet/default-implementations-in-interfaces/
接口不包含实现。他们所做的只是州议员签名。
接口的实现可以自由地为任何属性设置任何默认值。
例如,抽象类可以为其任何属性返回默认值。
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.
这对于静态字段是可能的。因为接口不能包含实例字段。静态字段不是实例字段。
或者您可以使用文字值。例如,我在下面的界面中使用 Age 属性。
但是,只有在将对象转换为接口之后,您才能访问默认实现的属性。
例如:
下面的代码不会编译
下面的代码将会编译
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.
But, you can access default implemented properties only after cast object to interface.
For example:
Code below will not compile
Code below will compile