2012-03-17 20 views
10

Mam następujące klasy:Dlaczego powinienem używać wirtualnego modyfikatora w klasie C#?

public class Delivery 
{ 
// Primary key, and one-to-many relation with Customer 
    public int DeliveryID { get; set; } 
    public virtual int CustomerID { get; set; } 
    public virtual Customer Customer { get; set; } 

// Properties 
    string Description { get; set; } 
} 

Może ktoś wyjaśnić, dlaczego informacja jest kodowana klienta z wirtualnym. Co to znaczy?

Odpowiedz

1

Guess używasz EF.

Co się stanie, gdy utworzysz wirtualny obiekt NavigationProperty, który EF dynamicznie tworzy klasę pochodną.
Ta klasa implementuje funkcjonalność, która pozwala na leniwy ładowanie i inne zadania, takie jak utrzymywanie relacji, które EF wykonuje dla ciebie.

Wystarczy pomysł klasa próba dynamicznie staje się czymś tak:

public class DynamicEFDelivery : Delivery 
{ 
    public override Customer Customer 
    { 
    get 
    { 
     return // go to the DB and actually get the customer 
    } 
    set 
    { 
     // attach the given customer to the current entity within the current context 
     // afterwards set the Property value 
    } 
    } 
} 

Można łatwo zobaczyć to podczas debugowania, rzeczywiste typy Instancji klasach EF mają imiona bardzo dziwne, ponieważ są one generowane w locie.

5

Sądząc po komentarzach, uczysz się Entity Framework?

wirtualny tutaj oznaczałoby próbujesz użyć leniwy załadunku - kiedy przedmioty związane, takie jak klient może być ładowany przez EF automatycznie

http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

Na przykład, podczas korzystania z klasy encji Księżniczkę zdefiniowaną poniżej, związanych jednorożce zostanie załadowany po raz pierwszy nieruchomość nawigacja jednorożce jest dostępne:

public class Princess 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<Unicorn> Unicorns { get; set; } 
} 
4

Może ktoś wyjaśnić, dlaczego informacja jest kodowana klienta z wirtualnym. Co to znaczy?

wirtualnego kluczowe oznacza super klasy pochodzące z tej klasy bazowej (to znaczy produktu) może ręczne tej metody.

Jeśli metoda ta nie została oznaczona jako wirtualnego to nie byłoby możliwe ręcznym tym sposobem.

Powiązane problemy