将自动属性用于显式接口实现在C# 5中不可能,但是现在C# 6支持只适用于自动属性,这应该是可能的,对吗?
在C# 6中创建自动属性是成功的,但是当尝试在构造函数中为其赋值时,必须首先将this转换为接口类型,因为实现是显式的。但是,VS 2015 RC和VS Code0.3.0都显示了注释中可以看到的错误:
using static System.Console;
namespace ConsoleApp
{
public interface IFoo { string TestFoo { get; } }
public class Impl : IFoo
{
// This was not possible before, but now works.
string IFoo.TestFoo { get; }
public Impl(string value)
{
// ERROR: Property or indexer 'IFoo.TestFoo' cannot be assigned to -- it is read only.
((IFoo)this).TestFoo = value;
}
}
public class Program
{
// Yes, not static. DNX supports that (for constructor DI).
public void Main(string[] args)
{
IFoo foo = new Impl("World");
WriteLine($"Hello {foo.TestFoo}");
ReadKey(true);
}
}
}注意:我更新了将常量设置为TestFoo**. 的原始问题。在我的实际场景中,值来自注入构造函数的对象。如果属性返回的值可以在初始化时设置,则[答案由DanielA.White](https://stackoverflow.com/a/30672805/1565070)是非常优秀的。
上面写着:
属性或索引器'IFoo.TestFoo‘不能分配给--它是只读的。
有办法解决这个问题吗,还是必须在这种情况下使用带有支持字段的属性?
我使用VisualStudio2015RC和VisualStudioCode0.3.0和DNX451 1.0.0-beta4。
我有在罗斯林GitHub页面上提出了一个问题. ,
可能重复是一个关于具有可读取的常规属性的接口的定义的问题。我的问题是如何使用一个新的C# 6特性显式地实现这样一个接口,从理论上讲,这应该是可能的。请参阅我在第一句中链接到的另一个类似的问题(但是对于C# 5,只有getter的汽车属性还没有)。
发布于 2016-12-02 03:47:54
您可以通过为显式实现的属性使用只读备份字段来解决这一问题。您可以将注入的值分配给构造函数中的支持字段,显式属性的get实现将返回它。
public class Impl : IFoo
{
private readonly string _testFoo;
string IFoo.TestFoo => _testFoo;
public Impl(string value)
{
_testFoo = value;
}
}发布于 2015-06-05 17:48:47
我想你想要这个
string IFoo.TestFoo { get; } = "World";https://stackoverflow.com/questions/30672761
复制相似问题