我在一个类中有一个double[,]
字段,并且不能直接将其直接传递给外部,这一点很重要,因此我创建了一个读写属性来控制它并将其设置为{{1} }。我在类中还有一个嵌套的private
,我想将其保留为值类型。结构本身具有一个struct
字段,该字段再次由相应的读写属性控制。在给定特定条件的情况下,如果为属性分配了以特定方式无效的值,则它将引发自定义double[,]
。我需要传递给exception
的参数之一是基于父类中exception
字段的值,但是如果没有结构,我似乎无法从结构中访问它设为double[,]
或public
。我已经尝试过internal
和protected
,但都没有用。还有其他解决方法吗?
private
我正在考虑可能访问属性而不是字段,但是对于包含有问题的struct实例的特定实例,我将需要该属性的值。可能有类似class myClass {
protected double[,] classField;
public double[,] classProperty {
get { return (double[,])classField.Clone();
set { /* code to validate the value and assign it */ }
}
private struct myStruct {
private double[,] structField;
public structProperty{
get { return (double[,])structField.Clone(); }
set {
if (!validate(value))
throw new customException(classField.getLength(1));
structField = (double[,])value.Clone();
}
}
//other fields, constructors, and methods...
}
//other fields, constructors, and methods...
}
的东西(我确实尝试过但没有用,但也许在概念上有一些变通方法)?
答案 0 :(得分:2)
我假设您希望myStruct
与包含的classField
实例的myClass
进行对话。
如果是这种情况:那么问题不是可访问性-它已经可以访问;问题是范围。就编译器而言,这里的嵌套与实例化无关,因此问题在于myStruct
没有与classProperty
对话的特定 instance 。这就是错误的原因:
错误CS0120,非静态字段,方法或属性'myClass.classField'需要对象引用
而不是可访问性:
由于其保护级别,错误CS0122'myClass.classField'无法访问
实际上,就可访问性而言,classField
可以是private
:嵌套类型可以看到包含类型的private
个成员。
您需要做的是类似的事情:
private struct myStruct
{
private readonly myClass _obj;
public myStruct(myClass obj) => _obj = obj;
// ...
}
,然后不仅要让它classField
,还需要告诉它与_obj.classField
进行对话以告诉它实例。您还需要构造myStruct
,并在与之相关的特定myClass
中传递。
基本上:您在问题中提到的this.parent
概念不是隐式的-您需要自己实现。