В том же решении у меня есть два проекта: P1 и P2. Как я могу использовать класс P1 в P2?
Как использовать класс из одного проекта С# с другим проектом С#
Ответ 1
Просто добавьте ссылку на P1 из P2
Ответ 2
- В дереве "Solution Explorer" разверните проект P2, а затем щелкните правой кнопкой мыши проект и выберите "Добавить ссылку" в меню.
- В диалоговом окне "Добавить ссылку" выберите вкладку "Проекты" и выберите проект P1.
- Если вы используете пространства имен, вам нужно будет импортировать пространства имен для ваших типов P1, добавив "использование" в ваши файлы в P2.
Обратите внимание, что типы в P1, к которым вы хотите получить доступ, должны иметь достаточный уровень доступа: обычно это означает, что они должны быть опубликованы.
Ответ 3
Пол Руайн прав, я только что попробовал сам построить проект. Я просто сделал целую SLN, чтобы проверить, работает ли она.
Я сделал это в VС# VS2008
< < (Просто помогая другим людям, которые читают это, а также с комментариями())
Шаг 1:
Сделайте решение под названием DoubleProject
Шаг 2:
Сделайте проект в решении с именем DoubleProjectTwo (для этого выберите файл решения, щелкните правой кнопкой мыши → Добавить → Новый проект)
Теперь у меня есть два проекта в одном решении
Шаг 3:
Как сказал Пол Руане. перейдите к ссылкам в проводнике решений (если он закрыт на вкладке просмотра компилятора). DoubleProjectTwo - это тот, который нуждается в функциях/методах DoubleProject, поэтому в ссылке DoubleProjectTwo правой мыши есть → Add → Projects → DoubleProject.
Шаг 4:
Включить директиву для Пространство имен:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DoubleProject; <------------------------------------------
namespace DoubleProjectTwo
{
class ClassB
{
public string textB = "I am in Class B Project Two";
ClassA classA = new ClassA();
public void read()
{
textB = classA.read();
}
}
}
Шаг 5:
Сделайте что-нибудь, покажите мне доказательства Результаты:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DoubleProject
{
public class ClassA //<---------- PUBLIC class
{
private const string textA = "I am in Class A Project One";
public string read()
{
return textA;
}
}
}
Основной
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DoubleProjectTwo; //<----- to use ClassB in the main
namespace DoubleProject
{
class Program
{
static void Main(string[] args)
{
ClassB foo = new ClassB();
Console.WriteLine(foo.textB);
Console.ReadLine();
}
}
}
СЛЕДУЕТ делать трюк
Надеюсь, что это поможет
EDIT: whoops забыл вызов метода, чтобы фактически изменить строку, не делайте то же самое:)
Ответ 4
Первым шагом является создание P2-ссылки P1, выполнив следующие
- Щелкните правой кнопкой мыши по проекту и выберите "Добавить ссылку"
- Перейдите на вкладку "Проекты".
- Выберите P1 и нажмите OK
Далее вам нужно убедиться, что классы в P1 доступны для P2. Самый простой способ - сделать их public
.
public class MyType { ... }
Теперь вы сможете использовать их в P2 через свое полное имя. Предполагая, что пространство имен P1 является Project1, тогда работала бы
Project1.MyType obj = new Project1.MyType();
Предпочтительным способом является добавление использования для Project1
, поэтому вы можете использовать типы без квалификации
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
Ответ 5
Слишком часто новый разработчик задает этот простой вопрос, который является общей проблемой, особенно с Visual Studio IDE. Мало кто отвечает на конкретный вопрос и часто критикует вопрос или дает "догадки" о решениях, которые не отвечают общим проблемам. Первой общей проблемой является IDE, которая позволяет создавать новые проекты, а не добавлять новые файлы (.java,.py,.cpp,.c) в существующее решение (по умолчанию оно создает новое решение), если вы не измените название проекта и добавить к текущему решению. Эта проблема возникает для папок проекта Python, java, С#, С++ и C.
Новый разработчик, который выбирает имя проекта "новый проект" и меняет каталог решений на "использование того же решения", по-прежнему создает новый "проект" в том же пространстве решений, но не в том же пространстве каталога, что и текущий пользовательский интерфейс файл или файл командной строки, который по-прежнему приводит к проблемам с ошибками "пакет не найден" при создании и запуске проекта или решения. Вот почему приведенные выше предложения по кодированию для импорта пакетов, классов, методов и функций работают (и, следовательно, не работают ответьте на вопрос), когда файл "library" или файл "отдельного поведения" находятся не только в одном пути каталога решений, но также в том же пространстве каталога приложений "пользовательский интерфейс" или "командная оболочка". Этого не происходит, когда вы добавляете другой проект, используя команды new > project > project type IDE. Проблема заключается в том, что новый проект хранится в другом каталоге, чем существующие файлы кода клиента или пользовательского интерфейса. Чтобы создать новый "файл" в том же пространство проекта rath чем новый проект, новичок должен сделать следующее, что Microsoft не будет делать для вас и даже вводит вас в заблуждение от интуитивно очевидного по умолчанию.
- Выберите "приложение", в которое вы хотите импортировать новое поведение (из другого файла)
- Выберите проект > добавить новый элемент
- Выберите "тип шаблона файла программы", например filetype.py, filetype.java, filetype.c, filetype.cpp, filetype.С# и т.д. или тип файла библиотеки (что-то другое, кроме параметров файла запуска, которые вы видите при создании нового проекта приложения или создании нового проекта библиотеки).
- В вашем проекте создается новое имя файла с именем по умолчанию.
- Измените имя файла по умолчанию на что-то вроде library.py или faasade.java и т.д.
СЕЙЧАС рекомендации по коду для импорта библиотек или использования пространств имен будут работать, как описано в комментариях выше, и вам не нужно менять инструкции маршрутов или изменять пути решений и имена решений, которые Microsoft не позволит вам легко меняться (т.е. вы может изменять имена файлов или имена проектов, но среда IDE не будет автоматически изменять путь к проекту или имена путей решения).
Ниже приведен пример Python, но он работает аналогично для С#, java или C/С++ с использованием include, namespaces или с помощью команд кода, соответствующих каждому языку, для поиска кода в других классах/проектах в САМОМИСПОЛОЖЕНИИ СПЕКТРА.
Файл приложения "hello world" импортирует из других файлов кода в тот же каталог.
Обратите внимание, что ограничители пробелов в python не будут корректно размещаться в этом редакторе комментариев stackoverflow:
print ("test")
from CIXMPythonFacade import ClassA
c1=ClassA
c1.methodA()
from CIXMPythonFacade import functionA
functionA()
class ClassName(object):
def __init__(object, parameter):
object.parameter = value
Файл библиотеки или файл "фасад", содержащий классы, методы или функции, которые вы хотите импортировать.
class class1(object):
"""description of class"""
class ClassA(object):
print ("test2")
def methodA():
print ("test3")
def functionA ():
print ("test4")
return (0)
pass
СЕЙЧАС, как вы на самом деле решаете беспорядок, с которым ведет IDE? Чтобы импортировать код из другого файла в том же пространстве каталога, вы добавляете ссылку на него.
- Выберите файл приложения
- Выберите "Проект" > добавить ссылку
- Выберите имя файла, видимое с правильным каталогом пути (проверьте его)
- Ссылка теперь доступна для интерпретатора, проверки кода и/или компилятора.
Итак, теперь, когда вы решили эту проблему, как вы действительно связываете два отдельных проекта вместе в одном пространстве решений?
- Вам нужно перейти к параметрам индексатора или "intellisense", а также к компилятору/интерпретатору и физически проверить или изменить/добавить инструкции пути к каталогам, если они являются чем-то иным, чем то, что указывает на ваш "второй" проект или пространство решения. Когда вы изменяете путь или изменяете переменные пути к своей рабочей области и к конкретным местам проектов, которые представляют собой разные пространства в каталоге, компилятор и анализатор кода могут затем находить эти библиотеки, headers.h, пространства имен, расположение проектов или файлов.
- Чтобы удалить старые проекты, которые вы создали по ошибке, это еще хуже. Вам нужно выйти из среды Visual Studio, открыть проводник Windows, перейти в каталог рабочей области... документы \visualstudio xxx\solutionname\packagename выберите файл или папку, щелкните правой кнопкой мыши и "удалите" файл или папку.
- Когда вы повторно вводите IDE и выбираете открытое решение или открываете пакет/решение, старые файлы и имена решений/пакетов пропадают, как и их вводящие в заблуждение инструкции пути, которые обманывают анализатор компилятора и кода, чтобы смотреть на старый каталог даже хотя вы изменили имя файла и изменили имя проекта, оно не меняет путь к каталогу.
Microsoft действительно действительно нуждается в исправлении этой проблемы, чтобы вы могли интуитивно создавать то, что большинство людей хотят создавать как новые файлы в тех же самых каталогах, и удалять решения, выбирая их и удаляя из среды IDE. Начинающие настолько расстраиваются, что инструкции каталога, настолько гибкие для опытных разработчиков, но настолько несправедливые для новых разработчиков в своих настройках по умолчанию.
Надеюсь, это действительно поможет вам новым парням и прекратит прикольные разработчики давать вам неправильные ответы, которые не сработают для вас. Они предполагают, что вы уже понимаете инструкции маршрута и просто хотите ввести правильный код... что также объясняет, почему туннель пытается исправить ваш код, но не поможет вам устранить проблему. Это, вероятно, самая распространенная проблема, постоянно описываемая в stackoverflow с неправильными ответами, которые не работают для новых программистов.
Ответ 6
В проекте P1 сделать класс общедоступным (если его еще нет). Затем добавьте ссылку на проект (а не ссылку на файл, ошибку, с которой я иногда сталкивался) на P2. Добавьте оператор using в P2 в нужное место и начните использовать класс из P1.
(Чтобы упомянуть об этом: Альтернативой тому, чтобы сделать класс общедоступным, было бы сделать P2 другом для P1. Это, однако, вряд ли будет ответом на вас, поскольку это может иметь некоторые последствия. предложение.)
Ответ 7
Скажите, что ваш класс в проекте 2 называется MyClass.
Очевидно, сначала ссылайтесь на свой проект 2 по ссылкам в проекте 1, затем
using namespaceOfProject2;
// for the class calling bit:
namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
поэтому всякий раз, когда вы хотите ссылаться на этот класс, вы вводите project2Class. Кроме того, убедитесь, что класс является общедоступным.
Ответ 8
Если у вас есть два проекта в одной папке решения. Просто добавьте ссылку проекта в другую. Используя пространство имен, вы можете получить классы. При создании объекта для этого класса requried. Вызовите метод, который вы хотите.
FirstProject:
class FirstClass()
{
public string Name()
{
return "James";
}
}
Здесь добавьте ссылку на второй проект
SecondProject:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}