В том же решении у меня есть два проекта: P1 и P2. Как я могу использовать класс P1 в P2?
В том же решении у меня есть два проекта: P1 и P2. Как я могу использовать класс P1 в P2?
Ответы:
Просто добавьте ссылку на P1 из P2
Обратите внимание, что типы в P1, к которым вы хотите получить доступ напрямую, должны иметь достаточный уровень доступа: обычно это означает, что они должны быть общедоступными.
Пол Руан прав, я только что попробовал построить проект. Я просто сделал целый SLN, чтобы проверить, работает ли он.
Я сделал это в ВК # VS2008
<< (Просто помогать другим людям, которые читают это, с помощью () комментариев)
Шаг 1:
Сделайте решение под названием DoubleProject
Шаг 2:
Сделайте проект в решении с именем DoubleProjectTwo (для этого выберите файл решения, щелкните правой кнопкой мыши -> Добавить -> Новый проект)
Теперь у меня есть два проекта в одном решении
Шаг 3:
Как заявил Пол Руан. перейти к ссылкам в обозревателе решений (если он закрыт на вкладке просмотра компилятора). DoubleProjectTwo - это тот, который нуждается в функциях / методах DoubleProject, поэтому в DoubleProjectTwo ссылка правой кнопкой мыши там -> Добавить -> Проекты -> 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();
}
}
}
Это должно делать свое дело
Надеюсь это поможет
РЕДАКТИРОВАТЬ ::: упс забыл вызов метода, чтобы фактически изменить строку, не делайте того же :)
Слишком часто новый разработчик задает этот простой вопрос, который является распространенной проблемой именно в среде разработки Visual Studio. Мало кто отвечает на конкретный вопрос и часто критикует вопрос или дает «догадки» о решениях, которые не отвечают на общие проблемы. Первая распространенная проблема заключается в том, что среда IDE заставляет вас создавать новые проекты, а не добавлять новые файлы (.java, .py, .cpp, .c) к существующему решению (по умолчанию создается новое решение), если вы не измените имя проекта. и добавить к текущему решению. Эта проблема возникает для папок проектов Python, java, C #, C ++ и C.
Этого не происходит, когда вы добавляете другой проект с помощью команд среды IDE new> project> project type. Проблема здесь в том, что новый проект хранится в другом каталоге, чем существующие файлы кода клиентского или пользовательского интерфейса. Чтобы создать новый «файл» в том же пространстве проекта, а не новый проект, новичок должен сделать следующее, чего Microsoft не сделает за вас и даже по умолчанию уводит вас от интуитивно очевидного.
СЕЙЧАС рекомендации по коду для импорта библиотек или использования пространств имен будут работать, как описано в комментариях выше, и вам не нужно изменять инструкции пути или менять пути решений и имена решений, которые Microsoft не позволит вам легко изменить (т.е. вы можете изменить имена файлов или имена проектов, но среда IDE не будет автоматически изменять путь к проекту или имена путей решения).
Ниже приведен пример Python, но он работает аналогично для C #, java или C / C ++ с использованием включений, пространств имен или команд кода, соответствующих каждому языку, для поиска кода в других классах / проектах в ТАКОМ ПРОСТРАНСТВЕ КАТАЛОГА.
Файл приложения "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 с неправильными ответами, которые не работают для начинающих программистов.
Первый шаг - сделать P2 ссылкой P1, выполнив следующие действия.
Затем вам нужно убедиться, что классы в P1 доступны для P2. Самый простой способ - сделать их public
.
public class MyType { ... }
Теперь вы сможете использовать их в P2 через их полное имя. Предполагая, что пространство имен P1 - Project1, тогда будет работать следующее
Project1.MyType obj = new Project1.MyType();
Однако предпочтительный способ - добавить using для, Project1
чтобы вы могли использовать типы без квалификации.
using Project1;
...
public void Example() {
MyType obj = new MyType();
}
Если у вас есть два проекта в одной папке решения, просто добавьте ссылку на проект в другую. Используя пространство имен, вы можете получить классы. При создании объекта для этого необходимого класса. Вызовите нужный метод.
Первый проект:
class FirstClass()
{
public string Name()
{
return "James";
}
}
Здесь добавьте ссылку на Второй проект
Второй проект:
class SeccondClass
{
FirstProject.FirstClass obj=new FirstProject.FirstClass();
obj.Name();
}
В проекте 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. Кроме того, убедитесь, что этот класс также является общедоступным.
У меня была проблема с разными целевыми фреймворками.
Я все делал правильно, но просто не мог использовать ссылку в P2. После того, как я установил одну и ту же целевую структуру для P1 и P2, все заработало отлично.
Надеюсь, это кому-то поможет
The name ... does not exist in the current context. Cannot resolve symbol ...
до тех пор, пока я не изменил целевые рамки проектов, чтобы они соответствовали. (Щелкните правой кнопкой мыши проект и перейти к Project -> Properties -> Target framework
изменить это.)