создать библиотеку классов - PullRequest
2 голосов
/ 28 марта 2011

Я использую Visual Studio 2010 и пытался создать библиотеку классов, которую затем использую в приложении, которое будет создавать задачи с помощью TaskFactory и выполнять функции класса из только что созданной библиотеки классов. Однако я получаю ошибки экземпляра не определены в приложении.

КЛАССНАЯ БИБЛИОТЕКА:
Название сборки: GPStream
Корневое пространство имен: TFStream

Проект с разными классами: GPStream:
gStream.vb,
parserT.vb,
insertDB.vb

Imports System.Data.SqlClient
Imports System.IO
Imports System.Text
Imports System.ComponentModel
Imports System.Net.Mail
Imports System.Threading
Imports System.Threading.Tasks

Public Class gStream
   Private Shared settings As New System.Configuration.AppSettingsReader
   ' application configuration variables'

   Public Sub New()
      getConfigurations()
   End Sub
   ...
End Class


Imports System.IO
Imports System.Web
Imports TFStream
Imports System.Configuration
Imports System.Threading
Imports System.Threading.Tasks


Public Class Form1
    Private gp1 As TFStream.GPStream.gStream = New TFStream.GPStream.gStream()
    ...
End Class

У меня есть в качестве ссылки.

Библиотека классов: имя сборки GPStream, корневое пространство имен GPStream Название проекта GPStream, Main Class gStream

Ответы [ 2 ]

3 голосов
/ 28 марта 2011

Хорошо, у меня будет более простой пример, который, я надеюсь, поможет вам достичь вашей цели.

Предположим, у нас есть проект бизнес-сущностей, который мы хотим использовать в нашем проекте WinForm,Затем у нас есть два проекта, скажем, в рамках одного решения для простоты.

  1. WinFormApp (MyCompany.MyProject.WinFormApp.exe);
  2. BusinessEntities (MyCompany.MyProject.BusinessEntities.dll)).

Мы примем это, поскольку эти файлы сборки содержат одинаковое имя сборки и пространство имен по умолчанию.

Пространство имен моегоПроект WinFormApp: MyCompany.MyProject.WinFormApp
И: MyCompany.MyProject.BusinessEntities для библиотеки классов.Давайте начнем с библиотеки классов, которая содержит два следующих класса:

  1. Customer;
  2. Supplier;
  3. CreditTerms.

Inбухгалтерский учет, эти два используются с разных точек зрения, которые Account Receivable для Заказчика и Account Payable для Поставщика.Правильное пространство имен может быть назначено для отражения этой реальности.

Класс Customer должен выглядеть следующим образом:

Imports MyCompany.MyProject.BusinessEntities

Namespace AccountReceivable
    Public Class Customer
        Private _id As Integer
        Private _name As String
        Private _phoneNumber As Long
        Private _creditTerm As CreditTerm

        Public Sub New()
            Term = CreditTerm.None
        End Sub

        Public Sub New(ByVal pId As Integer _
                        , ByVal pName As String _
                        , ByVal pPhoneNumber As Long)
            _id = pId
            Name = pName
            PhoneNumber = pPhoneNumber
            Term = CreditTerm.None
        End Sub

        Public ReadOnly Property Id As Integer
            Get
                Return _id
            End Get
        End Property

        Public Property Name As String
            Get
                Return _name
            End Get
            Set(ByVal value As String)
                If (String.IsNullOrWhiteSpace(value)) Then _
                    Throw New ArgumentNullException("Name")

                _name = value
            End Set
        End Property

        Public Property PhoneNumber As Long
            Get
                Return _phoneNumber
            End Get
            Set(ByVal value As Long)
                _phoneNumber = value
            End Set
        End Property

        Public Property Term As CreditTerm
            Get
                Return _term
            End Get
            Set(ByVal value As CreditTerm)
                _term = value
            End Set
        End Property
    End Class
End Namespace

Затем класс поставщика:

Imports MyCompany.MyProject.BusinessEntities ' Used for the CreditTerm Enum Property'

Namespace AccountPayable
    Public Class Supplier
        ' We will here consider having the same properties as Customer for simplicity.'
    End Class
End Namespace

ИПеречень CreditTerms, который здесь может быть назначен как Поставщику, у которого мы покупаем, так и Клиенту, которому мы продаем.С этой точки зрения, этот класс может быть либо в корне вашего проекта, чтобы нарушить его обычное использование.

Public Enum CreditTerm
    None
    N30
    N45
    N60
    N90
End Enum

Тогда наш проект WinFormApp должен выглядеть примерно так:

Imports System
Imports System.Linq
Imports System.Text
Imports System.Windows.Forms

Imports MyCompany.MyProject.BusinessEntities 'Indeed you have to add the reference...'
Imports MyCompany.MyProject.BusinessEntities.AccountReceivable

Public Partial Class Form1
    Inherits Form

    Private _netTerm As CreditTerm = CreditTerm.None
    Private _customer As Customer = New Customer()
    Private _supplier As AccountPayable.Supplier = New AccountPayable.Supplier()
    ...
End Class

Обратите внимание, что я явно импортировал MyCompany.MyProject.BusinessEntities и MyCompany.MyProject.BusinessEntities.AccountReceivable, чтобы проиллюстрировать различия в пространстве имен между перечислением CreditTerm и классом Customer.Поэтому я не импортировал пространство имен Supplier class ', которое обязывает меня указывать место, где найти класс.

В конце концов, у меня могло бы быть MyCompany.MyProject.BusinessEntities.Customer пространство имен для группировки всегоэто относится к клиенту в том же пространстве имен, в то время как класс Customer находится в пространстве имен Customer.Но тогда, даже при импорте пространства имен, вам нужно будет написать следующее:

Private _customer As Customer.Customer = New Customer.Customer()

При записи возникает еще одна вещь.Попробуйте собрать / сгенерировать / восстановить библиотеку классов, а затем добавить ее в качестве ссылки.Возможно, ваш проект, на который ссылается библиотека классов, не может найти двоичные файлы, кроме случаев, когда вы ссылались на него через ссылку на проект.

Пожалуйста, не стесняйтесь задавать любые вопросы о неправильно понятых деталях, или даже сказатьВозможно, я сам неправильно понял ваш вопрос и проблемы.

Я действительно надеюсь, что это поможет!

2 голосов
/ 28 марта 2011

Работает ли последний оператор Imports?Если это так, это означает, что GPStream.gstream является пространством имен, а не классом.Ваш класс, вероятно, имеет другое имя или вложен в это пространство имен (вы пробовали GPStream.gstream.gstream?).

...