我想知道是否无法设置访问器以允许您访问访问者的变量。 错误示例:
public void Main()
{
Object.name = "test"; //Can't access the object's subproperties
}
Objec ob = new Objec();
public Objec Object
{
get { return ob; }
set { ob = value; }
}
class Objec
{
string name;
string value;
}
无论如何都要做上述事情(除了为每个值设置访问器外)?
谢谢,
最大
编辑:这是一个更好的例子
public void Main()
{
//Now I can't change the X or Y properties, this will display an error
ThePoint.X = 10;
//To change the x value, I need to do the following:
ThePoint = new Point(10,0);
}
private Point Poi = new Point();
public Point ThePoint
{
get { return Poi; }
set { Poi = value; }
}
有没有办法让'ThePoint.X'工作(不只是公开展示'Poi')?
答案 0 :(得分:2)
我猜你没有发布完整的代码。我想你现在无法访问Objec.name,因为它是一个私有变量(因此无法从Main()访问)。
尝试:
class Program
{
public static void Main(string args[])
{
MyClass instance = new MyClass();
instance.Child.ChildValue = "something";
}
}
public class MyClass
{
// The following code declares Public Properties
// rather than private variables.
public string Value { get; set; }
public string Name { get; set; }
public MyChild Child { get; set; }
public MyClass()
{
this.Child = new MyChild();
}
}
public class MyChild
{
public string ChildValue { get; set; }
}
答案 1 :(得分:2)
好的,有了你的新例子,很清楚问题是什么:当它实际上是一个结构时,你表现得好像是一个类。
当您说ThePoint.X = 10;
时,您所做的只是更改原始点的副本的X.那是因为结构总是按值传递,而不是参考。
简而言之,错误符合您的期望。
答案 2 :(得分:1)
您应该公开名称和值变量以获得编译解决方案。或者更好的是,使用自动属性。
答案 3 :(得分:1)
您必须为要在C#中公开的每个类成员指定public
。
类成员,包括嵌套 班级和结构,可以公开, 受保护的,受保护的, 内部的,或私人的。访问级别 对于类成员和结构成员, 包括嵌套类和结构, 默认是私人的。
答案 4 :(得分:0)
您需要进行以下更改:
public void Main()
{
Object.name = "test"; //Can access the object's properties now...
}
Objec ob = new Objec();
public Objec Object
{
get { return ob; }
set { ob = value; }
}
public class Objec
{
public string name {get; set;}
public string value {get; set;}
}
答案 5 :(得分:0)
您实际问题的答案“无论如何都要做上述事情(除了为每个值设置访问器外)?”是的。
猜测一下你的意图,你似乎想要遵循一个名为Bridge的设计模式(你的类是围绕Object
和/或Point
的实现的抽象概念。您只会向您的班级观众展示您想要的原始实现的各个部分,在您的问题的情况下,每个值。