Я новичок в С# и 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", чтобы заставить его работать, и чтобы классы распознавались другими файлами в том же проекте.