Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用访问器公开类属性_C#_Accessor - Fatal编程技术网

C# 使用访问器公开类属性

C# 使用访问器公开类属性,c#,accessor,C#,Accessor,我不知道正确的技术术语来描述我的问题,因此我将举一个例子: private Point _PrivateVect = new Point(); public Point Publicvect { get { return _PrivateVect; } set { _PrivateVect = value; } } 问题

我不知道正确的技术术语来描述我的问题,因此我将举一个例子:

    private Point _PrivateVect = new Point();
    public Point Publicvect
    {
        get
        {
            return _PrivateVect;
        }
        set
        {
            _PrivateVect = value;
        }
    }

问题是,如果我想访问
Publicvect.X
,我得到的错误是
无法修改“Publicvect”的返回值,因为它不是一个变量。有办法解决这个问题吗?或者我只需要做
Publicvect=newpoint(NewX,Publicvect.Y)永远?

可变结构是邪恶的另一个原因。一种解决方法是为了方便起见,将维度公开为访问器:

public Point PublicX {
    get {return _PrivateVect.X;}
    set {_PrivateVect.X = value;}
}
public Point PublicY {
    get {return _PrivateVect.Y;}
    set {_PrivateVect.Y = value;}
}

但另一个原因是:;是的,您每次都需要执行
新点(x,y)
,因为
是一个结构。当您通过属性访问它时,您会得到它的一个副本,因此如果您对副本进行变异,然后放弃该副本,您只会丢失更改。

这里的问题是点类型是值类型。因此,当您操作Pointvect.X时,实际上是在操作值类型的临时副本,这当然对原始实例没有影响。

请显示生成该错误的代码。@Bob:如果您认为粗体有帮助,那么它没有帮助。我需要查看实际的代码行和实际的错误。