嵌套 Class,仅获取 属性
Nested Class with get only property
假设我有以下 class:
public class ClassA
{
public string ElementA { get; }
public string ElementB { get; }
}
public class ClassB
{
public ClassA ElementC = new ClassA()
{
ElementA = "Sample Value A",
ElementB = "Sample Value B"
};
public ClassB ElementD = new ClassA()
{
ElementA = "Sample Value C",
ElementB = "Sample Value D"
};
}
我如何将 ClassA 嵌套在内部并作为 ClassB 的元素,只有 { get; }
属性。我正在尝试实例化一个 class,它只能通过 { get; }
评估器访问,因为我希望它表现为一个固定的 variable/value。每当我尝试这种方法时,IDE (Visual Studio) 都会抛出一个错误:
Property or indexer 'ClassA.ElementA' cannot be assigned to -- it is
read only
将 ClassA 写为:
public class ClassA
{
public string ElementA { get; set; }
public string ElementB { get; set; }
}
使 ClassB 的 ClassA 元素可编辑,但不会在 IDE (Visual Studio) 中引发错误。
如何或有可能实现我的想法?谢谢。
一个属性定义如下:
public Foo Bar { get; }
相当于:
private readonly Foo bar;
public Foo Bar { get { return this.bar; } }
readonly
关键字表示该字段只能在class的构造函数(或字段初始化列表,在构造函数方法体之前执行)中赋值。
因为这个字段是私有的,你不能从类型的访问范围之外设置它,而且因为它是一个 readonly
字段,它必须在构造函数中 - 所以要使用 externally-provided 值你必须使用构造函数参数:
public ClassA(Foo value) {
this.Bar = value;
}
如果您不想从 class 外部修改属性,请添加私有 setter 并修改 class 的构造函数以在实例化时设置值:
public class ClassA
{
public ClassA(string elementA, string elementB)
{
ElementA = elementA;
ElementB = elementB;
}
public string ElementA { get; private set; }
public string ElementB { get; private set; }
}
然后像这样从 ClassB
实例化它:
public class ClassB
{
public ClassA ElementC = new ClassA("Sample Value A", "Sample Value B");
}
假设我有以下 class:
public class ClassA
{
public string ElementA { get; }
public string ElementB { get; }
}
public class ClassB
{
public ClassA ElementC = new ClassA()
{
ElementA = "Sample Value A",
ElementB = "Sample Value B"
};
public ClassB ElementD = new ClassA()
{
ElementA = "Sample Value C",
ElementB = "Sample Value D"
};
}
我如何将 ClassA 嵌套在内部并作为 ClassB 的元素,只有 { get; }
属性。我正在尝试实例化一个 class,它只能通过 { get; }
评估器访问,因为我希望它表现为一个固定的 variable/value。每当我尝试这种方法时,IDE (Visual Studio) 都会抛出一个错误:
Property or indexer 'ClassA.ElementA' cannot be assigned to -- it is read only
将 ClassA 写为:
public class ClassA
{
public string ElementA { get; set; }
public string ElementB { get; set; }
}
使 ClassB 的 ClassA 元素可编辑,但不会在 IDE (Visual Studio) 中引发错误。
如何或有可能实现我的想法?谢谢。
一个属性定义如下:
public Foo Bar { get; }
相当于:
private readonly Foo bar;
public Foo Bar { get { return this.bar; } }
readonly
关键字表示该字段只能在class的构造函数(或字段初始化列表,在构造函数方法体之前执行)中赋值。
因为这个字段是私有的,你不能从类型的访问范围之外设置它,而且因为它是一个 readonly
字段,它必须在构造函数中 - 所以要使用 externally-provided 值你必须使用构造函数参数:
public ClassA(Foo value) {
this.Bar = value;
}
如果您不想从 class 外部修改属性,请添加私有 setter 并修改 class 的构造函数以在实例化时设置值:
public class ClassA
{
public ClassA(string elementA, string elementB)
{
ElementA = elementA;
ElementB = elementB;
}
public string ElementA { get; private set; }
public string ElementB { get; private set; }
}
然后像这样从 ClassB
实例化它:
public class ClassB
{
public ClassA ElementC = new ClassA("Sample Value A", "Sample Value B");
}