public abstract class TabSymbolBase { }
public abstract class ContactDetailTabSymbol : TabSymbolBase
public class BasicInfoTabSymbol : ContactDetailTabSymbol { }
public class TeamListTabSymbol : ContactDetailTabSymbol { }
public abstract class MainTabSymbol : TabSymbolBase
public class ChannelListTabSymbol : MainTabSymbol { }
public class FavroitesTabSymbol : MainTabSymbol { }
public class SearchTabSymbol : MainTabSymbol { }
public interface ITabViewModel
public interface ISymbolTabViewModel<out TTabSymbol> : ITabViewModel where TTabSymbol : TabSymbolBase
TTabSymbol TabSymbol { get; }
public interface IMainTabViewModel<TMainTabSymbol> : ISymbolTabViewModel<TMainTabSymbol> where TMainTabSymbol : MainTabSymbol
public interface IContactDetailTabViewModel<TContactDetailTabSymbol> : ISymbolTabViewModel<TContactDetailTabSymbol> where TContactDetailTabSymbol : ContactDetailTabSymbol
public class ChannelListViewModel : IMainTabViewModel<MainTabSymbol.ChannelListTabSymbol>
public string Title => "Title";
public class FavoritesViewModel : IMainTabViewModel
public MainTabSymbols TabSymbol => MainTabSymbols.Favorites;
public string Title => "Title";
public class SearchViewModel : IMainTabViewModel
public MainTabSymbols TabSymbol => MainTabSymbols.Search;
public string Title => "Title";
public class BasicInfoViewModel : IContactDetailTabViewModel
public ContactDetailTabSymbols TabSymbol => ContactDetailTabSymbols.BasicInfo;
public string Title => "Title";
public class TeamListViewModel : IContactDetailTabViewModel
public ContactDetailTabSymbols TabSymbol => ContactDetailTabSymbols.TeamList;
public string Title => "Title";
public static void Main(string[] args)
Console.WriteLine(new TeamListViewModel().TabSymbol.GetType().Name);