public interface IEat<T>{
public interface ISpecies{
public interface ICharacterState {
Health CharacterState {get; set;}
public interface IHealthValue{
int HealthLevel(int value);
public class Mamal : ISpecies{
Console.WriteLine("I am a mamal");
public class Reptile : ISpecies {
Console.WriteLine("I am a reptile");
public class MyHealth : IHealthValue{
public virtual int HealthLevel(int value){
public class StateOfCharacter : MyHealth, ICharacterState {
public Health CharacterState {get; set;}
public int rejectLevel {get; set;}
public int consumeLevel {get; set;}
public string name {get; set;}
public int sugarLevel {get; set;}
public int fatLevel {get; set;}
public int vitaminLevel {get; set;}
public class Apple: Food {
public class Cake : Food {
public class Eat : IEat<Food>
public int Consume(Food Item){
Console.WriteLine("Yumm.... {0}", Item.name);
return Item.consumeLevel;
public class Reject : IEat<Food> {
public int Consume(Food Item){
Console.WriteLine("Yuck... I hate {0}", Item.name);
public abstract class Character : IHealthValue, ISpecies {
private readonly IHealthValue _healthValue;
private readonly ICharacterState _characterState;
private readonly ISpecies _speicies;
public Character(IHealthValue healthValue, ICharacterState characterState, ISpecies species){
_healthValue = healthValue;
_characterState = characterState;
public int HealthLevel(int value){
return _healthValue.HealthLevel(value);
public class Bear : Character {
public static void Main()
Console.WriteLine("Hello World");
Console.WriteLine(teddy.HealthLevel(80));