Как получить доступ к полю класса

Я изучаю язык 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

Класс - это просто шаблон. Вам нужно будет создать экземпляр, чтобы он имел доступ к полям, таким как i. Не забудьте также сделать их общедоступными, поскольку средство доступа по умолчанию является частным. Я бы порекомендовал хороший учебник по C#.

Caramiriel 04.01.2019 19:04

Сделайте это общедоступным и сделайте его собственностью. Возможно, тоже дайте ему многозначительное имя.

Ňɏssa Pøngjǣrdenlarp 04.01.2019 19:05

К вашему сведению: обратите внимание, что в вашем коде есть «поля экземпляра», а не «поля класса». Есть что-то вроде «полей класса» (или, скорее, «переменных класса»), которые в .NET называются «статическими полями» (статические поля объявляются с помощью ключевого слова static в объявлении поля).

user2819245 04.01.2019 19:05

Я заставил его работать, используя ключевое слово static. Спасибо @elgonzo. Однако я все еще не могу использовать поле экземпляра

RonS 04.01.2019 19:58

@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'. Вы можете объяснить, почему.

RonS 04.01.2019 20:07

Внимательно посмотрите на сообщение об ошибке. В чем ошибка точно? С каким фрагментом вашего кода возникает проблема с компилятором точно?

user2819245 04.01.2019 20:20
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
3
6
81
1

Ответы 1

C1 c1instance = новый C1 (); int j = C1.i;

Ох и измените int i = 5; в общедоступный int i = 5;

Это не идеально, но с этого следует начать

Это не «лучшие практики», это просто ответ на ваш вопрос, я бы лично использовал общедоступное свойство для «i» (и никогда не использовал отдельные буквы для переменной)

Trey 04.01.2019 19:08

Я попробовал код, предложенный 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'

RonS 04.01.2019 19:29

Другие вопросы по теме