Ответ 1
Просто добавьте ссылку на P1 из P2
В том же решении у меня есть два проекта: P1 и P2. Как я могу использовать класс P1 в P2?
Просто добавьте ссылку на P1 из P2
Обратите внимание, что типы в P1, к которым вы хотите получить доступ, должны иметь достаточный уровень доступа: обычно это означает, что они должны быть опубликованы.
Пол Руайн прав, я только что попробовал сам построить проект. Я просто сделал целую 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 забыл вызов метода, чтобы фактически изменить строку, не делайте то же самое:)
Первым шагом является создание P2-ссылки P1, выполнив следующие
Далее вам нужно убедиться, что классы в 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();
}
Слишком часто новый разработчик задает этот простой вопрос, который является общей проблемой, особенно с Visual Studio IDE. Мало кто отвечает на конкретный вопрос и часто критикует вопрос или дает "догадки" о решениях, которые не отвечают общим проблемам. Первой общей проблемой является IDE, которая позволяет создавать новые проекты, а не добавлять новые файлы (.java,.py,.cpp,.c) в существующее решение (по умолчанию оно создает новое решение), если вы не измените название проекта и добавить к текущему решению. Эта проблема возникает для папок проекта Python, java, С#, С++ и C.
Новый разработчик, который выбирает имя проекта "новый проект" и меняет каталог решений на "использование того же решения", по-прежнему создает новый "проект" в том же пространстве решений, но не в том же пространстве каталога, что и текущий пользовательский интерфейс файл или файл командной строки, который по-прежнему приводит к проблемам с ошибками "пакет не найден" при создании и запуске проекта или решения. Вот почему приведенные выше предложения по кодированию для импорта пакетов, классов, методов и функций работают (и, следовательно, не работают ответьте на вопрос), когда файл "library" или файл "отдельного поведения" находятся не только в одном пути каталога решений, но также в том же пространстве каталога приложений "пользовательский интерфейс" или "командная оболочка". Этого не происходит, когда вы добавляете другой проект, используя команды new > project > project type IDE. Проблема заключается в том, что новый проект хранится в другом каталоге, чем существующие файлы кода клиента или пользовательского интерфейса. Чтобы создать новый "файл" в том же пространство проекта rath чем новый проект, новичок должен сделать следующее, что Microsoft не будет делать для вас и даже вводит вас в заблуждение от интуитивно очевидного по умолчанию.
СЕЙЧАС рекомендации по коду для импорта библиотек или использования пространств имен будут работать, как описано в комментариях выше, и вам не нужно менять инструкции маршрутов или изменять пути решений и имена решений, которые 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? Чтобы импортировать код из другого файла в том же пространстве каталога, вы добавляете ссылку на него.
Итак, теперь, когда вы решили эту проблему, как вы действительно связываете два отдельных проекта вместе в одном пространстве решений?
Microsoft действительно действительно нуждается в исправлении этой проблемы, чтобы вы могли интуитивно создавать то, что большинство людей хотят создавать как новые файлы в тех же самых каталогах, и удалять решения, выбирая их и удаляя из среды IDE. Начинающие настолько расстраиваются, что инструкции каталога, настолько гибкие для опытных разработчиков, но настолько несправедливые для новых разработчиков в своих настройках по умолчанию.
Надеюсь, это действительно поможет вам новым парням и прекратит прикольные разработчики давать вам неправильные ответы, которые не сработают для вас. Они предполагают, что вы уже понимаете инструкции маршрута и просто хотите ввести правильный код... что также объясняет, почему туннель пытается исправить ваш код, но не поможет вам устранить проблему. Это, вероятно, самая распространенная проблема, постоянно описываемая в stackoverflow с неправильными ответами, которые не работают для новых программистов.
В проекте P1 сделать класс общедоступным (если его еще нет). Затем добавьте ссылку на проект (а не ссылку на файл, ошибку, с которой я иногда сталкивался) на P2. Добавьте оператор using в P2 в нужное место и начните использовать класс из P1.
(Чтобы упомянуть об этом: Альтернативой тому, чтобы сделать класс общедоступным, было бы сделать P2 другом для P1. Это, однако, вряд ли будет ответом на вас, поскольку это может иметь некоторые последствия. предложение.)
Скажите, что ваш класс в проекте 2 называется MyClass.
Очевидно, сначала ссылайтесь на свой проект 2 по ссылкам в проекте 1, затем
using namespaceOfProject2;
// for the class calling bit:
namespaceOfProject2.MyClass project2Class = new namespaceOfProject2.MyClass();
поэтому всякий раз, когда вы хотите ссылаться на этот класс, вы вводите project2Class. Кроме того, убедитесь, что класс является общедоступным.
Если у вас есть два проекта в одной папке решения. Просто добавьте ссылку проекта в другую. Используя пространство имен, вы можете получить классы. При создании объекта для этого класса requried. Вызовите метод, который вы хотите.
FirstProject:
class FirstClass()
{
public string Name()
{
return "James";
}
}
Здесь добавьте ссылку на второй проект
SecondProject:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}