Я изучаю язык C# и все еще нахожусь на самых основах понимания области переменных. Я не уверен, как я могу получить доступ к файлу в классе C1 в классе C2
Я пробовал использовать ключевое слово public при объявлении int i
using System;
namespace MyClass
{
class C1
{
int i = 5;
}
class C2
{
int j = i;
static void Main()
{
Console.WriteLine($"Value is {i}");
}
}
}
Я ожидаю, что на выходе будет «Значение 5», но появляется следующая ошибка
test.cs(11,10): error CS0103: The name 'i' does not exist in the current context test.cs(14,33): error CS0103: The name 'i' does not exist in the current context test.cs(7,6): warning CS0414: The field 'C1.i' is assigned but its value is never used
Сделайте это общедоступным и сделайте его собственностью. Возможно, тоже дайте ему многозначительное имя.
К вашему сведению: обратите внимание, что в вашем коде есть «поля экземпляра», а не «поля класса». Есть что-то вроде «полей класса» (или, скорее, «переменных класса»), которые в .NET называются «статическими полями» (статические поля объявляются с помощью ключевого слова static в объявлении поля).
Я заставил его работать, используя ключевое слово static. Спасибо @elgonzo. Однако я все еще не могу использовать поле экземпляра
@elgonzo, это работает using System; namespace MyClass { class C1 { public static int i = 5; } class C2 { static void Main() { Console.WriteLine($"Value is {C1.i}"); } } }, если я удалю static в C1 и заменю C2 на C1 c1Obj = new C1(); static void Main() { Console.WriteLine($"Value is {c1Obj.i}");, вы получите ошибку test.cs(14,43): error CS0120: An object reference is required for the non-static field, method, or property 'C2.c1Obj'. Вы можете объяснить, почему.
Внимательно посмотрите на сообщение об ошибке. В чем ошибка точно? С каким фрагментом вашего кода возникает проблема с компилятором точно?





C1 c1instance = новый C1 (); int j = C1.i;
Ох и измените int i = 5; в общедоступный int i = 5;
Это не идеально, но с этого следует начать
Это не «лучшие практики», это просто ответ на ваш вопрос, я бы лично использовал общедоступное свойство для «i» (и никогда не использовал отдельные буквы для переменной)
Я попробовал код, предложенный using System; namespace MyClass { class C1 { public int i = 5; } class C2 { C1 c1instance = new C1(); int j = c1instance.i; static void Main() { Console.WriteLine($"Value is {j}"); } } }, но получаю следующую ошибку: test.cs(12,17): error CS0236: A field initializer cannot reference the non-static field, method, or property 'C2.c1instance' test.cs(15,43): error CS0120: An object reference is required for the non-static field, method, or p roperty 'C2.j'
Класс - это просто шаблон. Вам нужно будет создать экземпляр, чтобы он имел доступ к полям, таким как
i. Не забудьте также сделать их общедоступными, поскольку средство доступа по умолчанию является частным. Я бы порекомендовал хороший учебник по C#.