0 votes

VB.NET - Comment assigner un objet à une instance d'objet (meilleure description à l'intérieur)

J'ai une instance d'objet à laquelle j'accède avec le ME comme il accède à l'objet instancié. J'ai une méthode qui récupère une collection de ces objets et je souhaite affecter le premier à l'objet instancié.

Voici 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

0voto

Loris Points 828

Vous ne pouvez pas. Ce que vous recherchez, c'est une méthode statique (partagée en VB) :

Dim Book as BookEntity
Book = BookEntity.FeaturedBook()

0voto

Serhat Özgel Points 10010

Cela semble impossible puisque vous essayez de remplacer une instance d'objet dont vous n'avez pas le contrôle. Une solution pourrait consister à remplacer tous les membres de votre instance de livre actuelle par les valeurs de Books(0) like :

Me.ConstructMeFrom(Books(0))

Où ConstructMeFrom remplace tous les champs d'un 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 l'instance elle-même par une autre instance. Je ne suis pas familier avec la syntaxe VB, mais voici comment cela pourrait être 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 :

L'exemple C# avec votre exemple mis à jour :

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

Maintenant, fais ça :

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

0voto

GalleySlave Points 1488

Soit utiliser un sous

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 avoir une fonction partagée, telle 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

0voto

jnylen Points 4405

Je suis désolé mais il y a quelque chose qui "sent mauvais" dans ce code... pourquoi devriez-vous remplacer l'actuel système de gestion de l'eau ? BookEntity objet ? Votre code semble faire certaines choses qui devraient être en dehors de la portée d'un objet BookEntity .

Je pense qu'à la place, vous devriez avoir une classe comme BookDisplayer qui a un CurrentBook qui gère la logique nécessaire à l'affichage d'un nouveau livre. En supposant que c'est ce que vous essayez d'accomplir, bien sûr.

EDITAR :

Cela ressemble à l'exemple de code suivant :

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

Cela devrait ressembler à ceci, avec le FeaturedBook logique vivant dans la BookCollection à la place :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X