Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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#_Oop_Geometry - Fatal编程技术网

&引用;“坚持”;在C#中。如何在过程之间存储对象?

&引用;“坚持”;在C#中。如何在过程之间存储对象?,c#,oop,geometry,C#,Oop,Geometry,我有GUI,允许用户创建和修改点对象。我需要存储这些点的列表,以便在特定图形中插入 我是这样想的: 在表单代码中,我打开了一个私有属性列表,并直接在表单代码中对其进行操作。这是正确的处理方法吗 比如: public partial class TesteInterface_AdicionarVertice : Form { public List<VerticeDNPM> listaVertices; public TesteInterface_AdicionarVe

我有GUI,允许用户创建和修改点对象。我需要存储这些点的列表,以便在特定图形中插入

我是这样想的:

在表单代码中,我打开了一个私有属性
列表
,并直接在表单代码中对其进行操作。这是正确的处理方法吗

比如:

public partial class TesteInterface_AdicionarVertice : Form {

   public List<VerticeDNPM> listaVertices;

   public TesteInterface_AdicionarVertice()
   {
      InitializeComponent();
      listaVertices = new List<VerticeDNPM>();
   }

}
公共部分类测试接口\u adicionarvice:Form{
公开名单;
公共测试接口\u AdicionarVertice()
{
初始化组件();
listaVertices=新列表();
}
}
那么,你觉得这个设计怎么样?有更好的方法吗?
谢谢你的考虑

我将使该列表为只读。谢谢你的主意

这里真正的问题是:我有一个按钮可以创建点,还有一个按钮可以从点创建多边形

我需要有一种方法来获得用户选择创建特定多边形时的点列表。这基本上就是我要问的:P


我想使用类属性(在本例中为列表)来存储临时点,直到用户创建多边形为止。这是一种有效的方法吗?

很抱歉。正确的代码是:

公共部分类测试接口\u adicionarvice:表单 {

公共列表;
公共测试接口\u AdicionarVertice()
{
初始化组件();
listaVertices=新列表();
}

}我不太清楚你在问什么。除了将非UI代码移出UI之外,我还将列表创建更改为只读字段,如下所示:

public partial class TesteInterface_AdicionarVertice : Form {
    private readonly List<VerticeDNPM> listaVertices = new List<VerticeDNPM>();
    public List<VerticeDNPM> Vertices {get; set;}; 

    public TesteInterface_AdicionarVertice()
    {
        InitializeComponent();       
    }
}
公共部分类测试接口\u adicionarvice:Form{
私有只读列表listaVertices=新列表();
公共列表顶点{get;set;};
公共测试接口\u AdicionarVertice()
{
初始化组件();
}
}

假设您包含了适当的名称空间包含和类定义,那么您发布的内容是有效的,并且没有明显违反任何最佳实践(除非您计算命名约定,在这种情况下,根据Microsoft的命名指导原则,VerticeDNPM应该是VerticeDNPM)。然而,为了从设计的角度对您的方法进行评论,您确实需要提供更多的信息。

我不会公开您的列表。那么你永远不知道是谁在修改它。将列表设置为私有,然后以只读方式公开


你可以阅读更多关于它的内容。您还可以运行代码。我相信它会把这个收起来的。

谢谢你的考虑

我将使该列表为只读。谢谢你的主意

这里的真实情况是: 我有一个创建点的按钮,还有一个从点创建多边形的按钮

我需要有一种方法来获得用户选择创建特定多边形时的点列表。这基本上就是我要问的:P


我想使用类属性(在本例中为列表)来存储临时点,直到用户创建多边形为止。这是一种有效的方法吗?

我同意将列表公开是一个坏主意,因为这样类的使用者就可以修改实际的列表对象本身,而这不是您想要的。相反,您希望将其作为只读属性公开,从而允许使用者访问列表内容

public partial class TestInterface_ADicionaryVertice : Form 
{
    private List<VerticeDNPM> listVertices = new List<VerticeDNPM>();
    public List<VerticeDNPM> { get { return listVertices; } }

    public TestInterface_ADiciontaryVertice()
    {
        InitializeComponent();
        ...manipulate list of points here...   
    }
}
公共部分类测试接口\u ADicionaryVertice:表单
{
私有列表listVertices=新列表();
公共列表{get{return listVertices;}}
公开测试界面
{
初始化组件();
…在此操作点列表。。。
}
}
通过这种方式,您可以修改代码中的点的私有列表,同时仍然允许使用者(可能是接收表单作为参数的某个对象?)访问点列表并读取它

另外两个想法: 1)如果唯一的消费者是从这个表单中派生出来的,而不是在它上面操作(作为参数接收它),那么就考虑改为保护列表。 2)如果您不希望列表被任何消费者修改(即,一旦操作完这些点,列表就不能更改),那么考虑为列表而不是列表本身公开枚举器。这样,有人可以列举要点,但不能改变它们

例如:
public IEnumerator GetPoints{get{return listVertices.GetEnumerator();}}

如果您授予用户对只读属性的访问权并返回原始列表,则a使用者仍然可以修改该列表。列表仍然是引用类型,因此属性返回指向列表的指针。真正的只读属性将在“get”中创建列表的副本,并返回该副本。

该代码甚至不会编译。请为您编辑它,但请删除它。通常情况下,编辑您的答案并留下注释来说明您所做的事情。您所指的泛型列表是在System.Collections.generic命名空间中定义的,因此您可能缺少“using”子句。@darin-问题出在答案标记中;不是实际的代码。我正在使用
标签。由于某些原因,它们导致在帖子中看不到泛型。我把它们拿出来,现在就显示出来。我复制了这个问题的后续“答案”的内容。请删除此项。我将公开IList、IEnumerable、ReadOnlyCollection等,而不是列表
public partial class TestInterface_ADicionaryVertice : Form 
{
    private List<VerticeDNPM> listVertices = new List<VerticeDNPM>();
    public List<VerticeDNPM> { get { return listVertices; } }

    public TestInterface_ADiciontaryVertice()
    {
        InitializeComponent();
        ...manipulate list of points here...   
    }
}