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

В том же решении у меня есть два проекта: 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();
}