C#can';无法访问另一个类变量

C#can';无法访问另一个类变量,c#,forms,class,C#,Forms,Class,我无法从我的一个类访问某些内容并在另一个类中使用它。当我输入对象的名称时,它不知道我在说什么。我如何在课间阅读 我的代码: 第一节课: public class Form1 { public struct TriangleDrawer { // ... public Color Vert1Color; // ... } TriangleDrawer myTriangle = new TriangleDrawer

我无法从我的一个类访问某些内容并在另一个类中使用它。当我输入对象的名称时,它不知道我在说什么。我如何在课间阅读

我的代码: 第一节课:

public class Form1 
{
    public struct TriangleDrawer 
    {
        // ...
        public Color Vert1Color;
        // ...
    }

    TriangleDrawer myTriangle = new TriangleDrawer();
    myTriangle.Vert1Color = Color.Red;
}
第二节课:

public class TriangleWindow: Form1 
{
    void WhateverVoid() 
    {
        GL.Color3(myTriangle.Vert1Color);
    }
}

Form1
不包含
myTriangle的定义。Vert1Color

myTriangle
设为公共/受保护属性,默认为私有,即使使用子类也无法访问它

public class Form1
{
    public TriangleDrawer MyTriangle { get; set; }
}
然后你可以做如下的事情

 public class TriangleWindow : Form1
    {
        void WhateverVoid()
        {
            GL.Color3(MyTriangle.Vert1Color);
        }
    }

如果不指定访问修饰符(public、private等),则声明的成员将具有最严格的可能性。在这种情况下,
myTriangle
将是
private
,这意味着只有自己的类才能访问它

如果希望派生类访问它,则必须将其声明为受保护的。当然,如果你想让全世界都能访问它,就把它声明为公共的,但是要小心,这不是一个好主意。您应该使用访问器(
get
set
),这样您就可以控制该变量将发生什么。基本上,如果你把它公开,然后它的价值不是你所期望的,那么你就很难找出原因

您应该阅读以下链接:


您必须将“myTriangle”字段声明为公共字段,以便从其他类访问它。或者,如果两个类都在同一名称空间中,则将其声明为internal。

myTriangle.Vert1Color=Color.Red无法这样编译,因为它在该上下文中不存在。另请参阅。请注意,公共字段是一个糟糕的决策选择,因此公共属性是一个更好的选择。如果您需要更具体的帮助,请发布一个新问题,其中包括一个很好的演示您尝试过的内容,以及一个清晰、详细的解释,说明您遇到的具体问题。如果只有子类在使用它,为什么要将其公开?应该受到保护。@Rob是的,OP可以根据需要决定使用私有还是公共