2008-11-07 4 views
0

J'ai une instance d'objet à laquelle j'accède avec le ME lorsqu'il accède à l'objet instancié. J'ai une méthode qui obtient une collection de ces objets et je souhaite assigner le premier à l'objet instancié.VB.NET - Comment affecter un objet à une instance d'objet (meilleure description à l'intérieur)

Ceci est une partie du code

Dim Books As New BookCollection(True) 
Books.ListByThemeFeatured(ThemeID, 1) ' Fills the collection 

If Books.Count > 0 Then 
    Me = Books(0) ' Should set the first item to the current object 
End If 

Est-ce possible?

EDIT: Me fait référence à la classe qui a été instanciée. Dans ce cas, il s'agit d'une classe BookEntity. Cette méthode aurait été appelée en utilisant le code suivant

Dim Book As New BookEntity 
Book.FeaturedBook() ' Should fill the book entity with a featured book 

Répondre

0

Vous ne pouvez pas. Qu'est-ce que vous cherchez est statique (partagé en VB) Méthode:

Dim Book as BookEntity 
Book = BookEntity.FeaturedBook() 
0

Il semble impossible puisque vous essayez de remplacer une instance d'objet que vous n'avez pas la poignée. Un choix peut être de remplacer tous les membres de votre instance du livre en cours avec les valeurs des Livres (0) comme:

Me.ConstructMeFrom(Books(0)) 

Où ConstructMeFrom remplace tous un champs de livre:

Sub ConstructMeFrom(Book newBook) 
    Me.Title = newBook.Title 
    Me.PageCount = newBook.PageCount 
    'etc 
End Sub 

Ou vous pouvez concevoir une méthode pour modifier la valeur du handle qui contient votre instance. Par exemple vous pouvez utiliser un délégué qui remplace une instance par une autre instance. Je ne suis pas familier avec la syntaxe vb, mais voici comment ce serait fait en C#:

public class Book 
{ 
    public delegate void Replacer(Book book); 

    public void ReplaceMe(Replacer replacer, Book newBook) 
    { 
     replacer(newBook); 
    } 

    public int PageCount; 
} 

static void Main(string[] args) 
{ 
    Book b1 = new Book() { PageCount = 3 }; 
    Book b2 = new Book() { PageCount = 5 }; 
    b1.ReplaceMe(book => b1 = book, b2); 
    Console.WriteLine(b1.PageCount); // Output is 5. 
} 

Mise à jour:

C# exemple avec votre exemple mis à jour:

FeaturedBook(Replacer replacer) 
{ 
    Book featuredBook = FindTheFeaturedBookFromSomeList(); 
    replacer(featuredBook); 
} 

Maintenant faites :

BookEntity Book; 
Book = BookEntity.FeaturedBook(delegate(BookEntity b) { Book = b; }); 
+0

I J'essaie d'éviter d'avoir à coder à la main ce genre de chose car les propriétés changent tout le temps. –

0

Utilisez un

public sub FeaturedBooks() 
    dim FB as Book = GetFeaturedBook() 
    CopyToMe(FB) 
end sub 

private shared sub CopyToMe(Abook as book) 
    Me.Bookname = aBook.BookName 
    etc 
end sub 

ou une fonction partagée, de sorte que vous écrivez:

Dim Book as BookEntity = BookEntity.FeaturedBook() 


Class BookEntity 

Public shared function FeaturedBook() as BookEntity 
    Dim NewBook as BookEntity 
    Get the featured book into here... 

    return NewBook 
end function 

end class 
0

Je suis désolé, mais quelque chose « pue » au sujet de ce code ... pourquoi devriez-vous jamais besoin de remplacer le courant BookEntity objet? Votre code semble faire certaines choses qui devraient être en dehors de la portée d'un BookEntity.

Je pense plutôt que vous devriez avoir une classe comme BookDisplayer qui a une propriété CurrentBook qui gère la logique nécessaire pour afficher un nouveau livre. En supposant que c'est ce que vous essayez d'accomplir, bien sûr.

EDIT:

Il semble que l'exemple de code suivant:

Book.FeaturedBook() ' Should fill the book entity with a featured book 

devrait ressembler à cela, la vie logique FeaturedBook dans la classe à la place BookCollection:

Book = Books.GetFeaturedBook() 
' NOW perform display logic 
Questions connexes