这可能很蹩脚,但在这里:
public interface Interface<T>
{
T Value { get; }
}
public class InterfaceProxy<T> : Interface<T>
{
public T Value { get; set; }
}
public class ImplementedInterface: InterfaceProxy<Double> {}
现在我想创建ImplementedInterface
的实例并初始化它的成员。
这可以像(使用初始化列表)那样以某种方式完成,或者只能使用带有Double
参数的构造函数来实现相同的行为吗?
var x = new ImplementedInteface { 30.0 };
答案 0 :(得分:7)
可以通过以下方式完成:
var x = new ImplementedInteface { Value = 30.0 };
答案 1 :(得分:2)
你应该可以这样做:
var x = new ImplementedInterface {Value = 30.0};
答案 2 :(得分:2)
var x = new ImplementedInterface() { Value = 30.0 };
答案 3 :(得分:2)
实现你所追求的目标的唯一方法是你的类实现IEnumerable<T>
并且有一个Add方法:
public class MyClass : IEnumerable<double>
{
public void Add(double x){}
}
然后你可以这样做:
MyClass mc = new MyClass { 20.0 };
显然这不是你想要的,因为这不会设置你的Value
,它允许你添加多个值:
MyClass mc = new MyClass { 20.0, 30.0 , 40.0 };
就像其他人指出的标准对象初始化一样:
var x = new ImplementedInterface() { Value = 30.0 };
答案 4 :(得分:1)
var instance = new ImplementedInterface { Value = 30.0 };
会奏效。但是,这与C ++初始化程序列表实际上并不是一组操作 - 这是一个对象初始化程序。它通过默认构造函数初始化新实例,然后为每个属性调用属性setter。
换句话说,该对象是在属性设置器运行之前构造的。如果您希望在ImplementedInterface构造之前设置属性的值完成,则必须编写构造函数,如您所述。这种行为上的区别通常无关紧要,但要注意这一点很好。
答案 5 :(得分:1)
我不确定您是否有特殊原因以这种方式使用接口,但以下代码可能适合您。
public class ImplementedInterface2 : List<double> { }
public class test
{
public void x()
{
var x = new ImplementedInterface2() { 30.0 };
}
}
答案 6 :(得分:0)
var x = new ImplementedInterface { Value = 30.0 };
答案 7 :(得分:0)
你绝对可以使用初始化列表,但你必须指定30.0是什么(对于任何初始化列表都是如此,而不仅仅是你拥有的代码):
var x = new ImplementedInteface { Value=30.0 };