2016-03-11 1 views
-1

На моем сайте я использую View Model для каждой страницы. Каждая модель просмотра состоит только из свойств, и ничего больше. Некоторые страницы используют одну и ту же группу свойств. Я бы хотел создать отдельный класс для каждой группы свойств, а затем использовать соответствующие группы на каждой странице View Model.Модели с множественным наследованием в C#

пример собственности группы:

public class GroupCar 
{ 
    public string CarName { get; set; } 
    public string CarColour { get; set; } 
    public string CarLink { get; set; } 
} 

public class GroupSport 
{ 
    public string SportName { get; set; } 
    public string SportLocation { get; set; } 
    public string SportLink { get; set; } 
} 

public class GroupFood 
{ 
    public string FoodName { get; set; } 
    public string FoodPrice { get; set; } 
    public string FoodLink { get; set; } 
} 

Теперь в моей модели представления, я бы несколько свойств этой странице, и я хотел бы использовать некоторые свойства этих групп.

Я могу Наследовать одну из групп легко

public class VMMyPage : GroupCar 
{ 
    //My Bespoke Properties 
} 

Как я наследовать несколько групп, хотя ... что-то вроде:

public class VMMyPage : GroupCar, GroupSport, GroupFood 
{ 
    //My Bespoke Properties 
} 

Я знаю, что вы не можете сделать это в C#, но есть ли обходной путь? Я прочитал несколько статей об использовании класса интерфейса, но нет примеров того, чего я пытаюсь достичь?

ответ

0

В C#, то classes разрешается только inherit от одного родителя class .Но вы можете использовать interfaces или комбинацию одного class и interface(s).

Итак, здесь вы можете сохранить недвижимость в: Interfaces, и вы можете выполнить свою логику.

Чтобы узнать больше о наследовании read

+0

Из вопроса ОП я не думаю, что он действительно заботится о том, контракт или не доступны в них свойства, хотя, я думаю, что он просто хочет получить доступ к ним без необходимости ввода/копировать их все снова. –

+0

Да, я не хочу писать их в каждой модели просмотра. Я хочу одно центральное место, где я могу легко управлять ими по всем моделям одновременно. – Dan88

0

Это, как вы достигаете его интерфейсов. Но с наследованием от интерфейса вам нужно реализовать свойства в классе viewmodel.

public interface IGroupCar 
    { 
     string CarName { get; set; } 
     string CarColour { get; set; } 
     string CarLink { get; set; } 
    } 

    public interface IGroupSport 
    { 
     string SportName { get; set; } 
     string SportLocation { get; set; } 
     string SportLink { get; set; } 
    } 

    public interface IGroupFood 
    { 
     string FoodName { get; set; } 
     string FoodPrice { get; set; } 
     string FoodLink { get; set; } 
    } 

    public class VMMyPage : IGroupCar, IGroupSport, IGroupFood 
    { 
     public string CarName { get; set; } 
     public string CarColour { get; set; } 
     public string CarLink { get; set; } 
     public string SportName { get; set; } 
     public string SportLocation { get; set; } 
     public string SportLink { get; set; } 
     public string FoodName { get; set; } 
     public string FoodPrice { get; set; } 
     public string FoodLink { get; set; } 
     // Your custom view model properties   
    } 
+0

Итак, если вы используете интерфейс, вам все равно придется выписывать все свойства снова в модели? – Dan88

+0

Да, вы понимаете, интерфейс - это просто класс подписи, который вам нужно унаследовать от всех его свойств. –

+0

Хорошо Спасибо за ответ. Не уверен, что интерфейсы действительно помогут мне в этой ситуации. Идея заключалась в том, что мне приходилось записывать переменные только один раз, а затем я могу добавлять, удалять, обновлять и использовать их все из одного центрального местоположения. – Dan88