Помогите плз с кодом

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

Valery
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 18.11.2004 (Чт) 13:16

Помогите плз с кодом

Сообщение Valery » 18.11.2004 (Чт) 18:57

Недавно перешел с Vb6 на Vb.Net и сейчас столкнулся с проблемой - для вас может пустяк - а я прям никак не найду что делать - в интернете не нашел, а книжка только одна... и там нет таких деталей...

В общем вот проблема:

создаем новый класс:

Public Class Sample
Dim _Name As String
Public Property Name() As String
Get
Name = _Name
End Get
Set(ByVal Value As String)
_Name = Value
End Set
End Property
End Class

в коде формы создаем Sub

Public Sub TestSample()
Dim A As New Sample()
Dim B As New Sample()
A = B
A.Name = "wow"
B.Name = "test"
MsgBox(A.Name)
End Sub

и в общем эта зараза понятное дело выведет мне "test"
Проблема в том что мне надо из B скопировать Properties в A, но чтобы при этом A и B не указывали на одни и те же данные в памяти... если вы поняли...
то есть заменить A=B на что-то другое - но на что - я не знаю :( подскажите плз

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 18.11.2004 (Чт) 19:09

Для таких вещей надо использовать конструктор копирования, вот пример:

Код: Выделить всё
Public Class Sample
    Private _Name As String
    Public Sub New()

    End Sub
    Public Sub New(ByVal copyObject As Sample)
        Me._Name = copyObject.Name
    End Sub

    Public Property Name() As String
        Get
            Name = _Name
        End Get
        Set(ByVal Value As String)
            _Name = Value
        End Set
    End Property
End Class


Тогда сделав так:
Код: Выделить всё
        Dim A As New Sample
        A.Name = "wow"
        Dim B As New Sample(A)
        A.Name = "test"
        MsgBox(B.Name)


Увидишь, что все ок. Т.е. надо просто копировать нужные свойства в конструкторе (одном из).
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 18.11.2004 (Чт) 19:10

Либо добавить метод для копирования в сам объект.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Valery
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 18.11.2004 (Чт) 13:16

Сообщение Valery » 18.11.2004 (Чт) 19:41

А я сначала как увидел код - подумал зачем там два sub new :)
только потом понял - когда не вставил в код

Public Sub New()

End Sub

В общем все работает, огромное спасибо (а то у меня программа чуть ли не два дня стояла - хотелось по человечески сделать а не по кривому - но не знал как)

Одним словом работа пошла :)
И как я только раньше программы писал... и как они только работали?!

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 19.11.2004 (Пт) 9:16

gaidar писал(а):Либо добавить метод для копирования в сам объект.


public interface ICloneable
Member of System

Summary:
Supports cloning, which creates a new instance of a class with the same value as an existing instance.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 19.11.2004 (Пт) 12:04

Я предложил стандартный вариант из теории ООП.
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

Valery
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 24
Зарегистрирован: 18.11.2004 (Чт) 13:16

Сообщение Valery » 19.11.2004 (Пт) 12:39

Public Class Sample
Implements ICloneable
Public Overridable Overloads Function Clone() As Object Implements ICloneable.Clone
Return Me
End Function

Что-то наверно не так я сделал - потому что получается та же проблема что и в начале...
А вот что не так?
И как я только раньше программы писал... и как они только работали?!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 73

    TopList