Как использовать класс из других файлов на С# с визуальной студией?

Я новичок в С# и MS Visual Studio, и я хочу использовать класс С#, который определен в другом файле, но не может заставить его работать.

Вот program.cs (и почему я не могу переименовать этот файл?)

using System;

namespace TestCSharp2
{
    class Program
    {
        static void Main(string[] args)
        {
            Class2 class2 = new Class2();
            // here the IDE will complain that cant find namespace or balabala..
            class2.setValue(10);
            Console.WriteLine(class2.getValue().ToString());
            Console.ReadKey();
        }
    }
}

И вот Class2, который я хочу использовать в файле Class2.cs:

namespace TestCSharp2
{
    class Class2
    {
        int i;
        public void setValue(int i)
        {
            this.i = i;
        }
        public int getValue()
        {
            return this.i;
        }
    }
}

Должен ли я #include или что-то еще? недостаточно use namespace?

enter image description here


Как некоторые парни спросили, находятся ли они в одном сборке/том же проекте, я предположим, потому что вот процедура их создания:

  • Новый проект с использованием шаблона Console С# Project, затем program.cs был создан по умолчанию.
  • Класс2.cs был создан с [File] → [New] → [File] → [С# class] и сохранен в той же папке, где program.cs живет.

Честно говоря, я не знаю, находятся ли они в одном сборке/одном проекте, но я думаю, что они были.

Ответ 1

Согласно вашему объяснению, вы не включили свой Class2.cs в свой проект. Вы только что создали необходимый файл класса, но не включили его в проект.

Класс2.cs был создан с [File] → [New] → [File] → [С# class] и сохранен в той же папке, где живет program.cs.

Чтобы преодолеть это, выполните следующие действия:

Просто Right click в вашем проекте затем → [Добавить] → [Существующий элемент...]: выберите Class2.cs и нажмите OK

Теперь проблема должна быть решена.

Кроме того, при добавлении новых классов эта процедура используется

Right click в проекте → [Добавить] → Выбрать необходимый элемент (ex-A-класс, форма и т.д.)

Ответ 2

Было бы выгоднее для нас, если бы мы могли видеть фактическую структуру проекта, поскольку одни классы не так много говорят.

Предполагая, что оба файла .cs находятся в одном проекте (если они находятся в разных проектах внутри одного и того же решения, вам нужно добавить ссылку на проект, содержащий Class2.cs), вы можете нажать на Class2 в вашем коде, подчеркнутом красным, и нажмите CTRL + . (период) или нажмите на синюю полосу, которая должна быть там. При первом появлении появится соответствующий оператор using. Если такого меню нет, это может указывать на то, что что-то не так с конструкцией проекта или отсутствием ссылки.

Вы можете попробовать сделать Class2 public, но похоже, что здесь не может быть проблемы, поскольку по умолчанию вы сделали internal class Class2 и, следовательно, Class2 должны быть доступны, если оба они живут тот же проект/сборка. Если вы ссылаетесь на другую сборку или проект, в котором содержится Class2, вы должны сделать его public для доступа к нему, так как классы internal не могут быть доступны извне их сборки.

Что касается переименования: вы можете нажать Program.cs в Обозревателе решений и нажать F2, чтобы переименовать его. Затем откроется диалоговое окно с просьбой о том, следует ли переименовать сам класс Program и все его ссылки, что обычно требуется вам. Или вы можете просто переименовать класс Program в декларации и снова открыть меню с небольшой синей полосой (или, опять же, CTRL + .) и сделать то же самое, но он не будет автоматически переименовывать фактический файл соответственно.

Редактировать после редактирования вопроса: Я никогда не использовал этот вариант, который вы использовали, но из быстрой проверки я думаю, что это действительно не внутри того же проекта. При добавлении новых классов в проект выполните следующие действия: В обозревателе решений щелкните правой кнопкой мыши проект, который вы создали, и выберите [Добавить] → [Класс] или [Добавить] → [Новый элемент...], а затем выберите "Класс". Это автоматически сделает новую часть класса проекта и, следовательно, сборку (сборка в основном является "конечным продуктом" после создания проекта). Для меня есть также ярлык Alt + Shift + C, работающий над созданием нового класса.

Ответ 3

Да, я только что сделал ту же самую ошибку 'noob' и нашел эту тему. На самом деле я добавил класс к решению, а не к проекту. Так это выглядело так:

Wrong and right description

Просто добавив это в надежде помочь кому-то.

Ответ 4

В соответствии с вашим примером здесь кажется, что они оба находятся в одном пространстве имен, я делаю вывод, что они являются частью одного и того же проекта (если вы еще не создали другой проект с тем же пространством имен) и все классы по умолчанию определяются как внутренние для проекта, в котором они определены, если не были объявлены иначе, поэтому я думаю, проблема в том, что ваш файл не включен в ваш проект. Вы можете включить его, щелкнув правой кнопкой мыши файл в окне explorer explorer = > Include в проекте, если вы не видите файл внутри файлов проекта в проводнике решений, затем нажмите кнопку show, чтобы отобразить верхнюю кнопку меню в проводнике решений, называемую show all files (просто наведите курсор мыши на кнопку там, и вы увидите имена кнопок)

Только для базовых знаний: Если файл находится в другом проекте \assembly, он должен быть определен, в противном случае он должен определяться, по крайней мере, как внутренний или публичный. в случае, если ваш класс наследует от этого класса, что он также может быть защищен.

Ответ 5

namespace TestCSharp2
{
    **public** class Class2
    {
        int i;
        public void setValue(int i)
        {
            this.i = i;
        }
        public int getValue()
        {
        return this.i;
        }
    }
}

Добавьте объявление 'Public' перед классом Class2.

Ответ 6

У меня была такая же проблема здесь. Выяснил, что проблема была с расширенным свойством файла. Есть вариант с названием "Compilation Action" (может быть, не с точными словами, я переводю - мой VS на португальском языке).

Мой файл Class1.cs был там как "Content", и мне просто пришлось изменить его на "Compile", чтобы заставить его работать, и чтобы классы распознавались другими файлами в том же проекте.