2016-11-12 2 views
-1

Я не могу получить доступ к чему-либо из одного из моих классов и использовать его в другом. Он не знает, что я говорю, когда я набираю имя объекта. Как читать между классами?C# не может получить доступ к другой переменной класса

Мой код: В первом классе:

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

+0

'myTriangle.Vert1Color = Color.Red;' не может компилироваться таким образом, поскольку он не существует в этом контексте. – Jim

+0

См. Также https://stackoverflow.com/questions/2378511/getting-values-from-method-from-other-form. Обратите внимание, что публичные поля - это плохой выбор решений, поэтому государственная собственность - лучший способ пойти. Если вам нужна более конкретная помощь, отправьте новый вопрос, в который вы включили хороший [mcve], показывающий, что вы пробовали, а также четкое и подробное объяснение того, с чем вы сталкиваетесь. –

ответ

0

делают myTriangle, как общественность/защищены свойство, по умолчанию является приватным, и вы не можете получить к нему доступ даже с подклассами

public class Form1 
{ 
    public TriangleDrawer MyTriangle { get; set; } 
} 

, то вы можете сделать, как показано ниже

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

Зачем делать это общедоступным, если только подкласс использует его? Должна быть защищена. – Rob

+0

@Rob Да, ОП может решить, использовать ли частные или публичные, в зависимости от требований – Damith

0

Если вы не указываете модификатор доступа (государственные, частные и т.д.), заявленная член будет иметь самую строгую возможность. В этом случае myTriangle будет private, а это значит, что к нему сможет получить доступ только собственный класс.

Если вы хотите, чтобы производные классы получили к нему доступ, вы должны объявить его protected. Конечно, если вы хотите, чтобы весь мир получил к нему доступ, объявите его public, но будьте осторожны, это не очень хорошо с вашим кодом, как есть. Вы должны использовать аксессоры (get и set), поэтому у вас есть контроль над тем, что произойдет с этой переменной. В принципе, если вы делаете это public, и тогда его значение не то, что вы ожидали, будет сложнее узнать, почему.

Некоторые ссылки вы должны прочитать:

Accessibility Levels

Using Properties

0

Вы должны объявить поле «myTriangle», как общественности, с тем чтобы доступ к нему из другого класса. Или объявите его внутренним, если оба класса находятся в одном пространстве имен.

Смежные вопросы