当前位置: 代码迷 >> C# >> 父类跟子类的转换
  详细解决方案

父类跟子类的转换

热度:26   发布时间:2016-05-05 03:34:07.0
父类和子类的转换
看下面的例子,在调用 Dog d = d1.Mating(d2);  时系统报错,
那如何才能使父类中Mating的返回值根据子类的变化而变化呢?
难得必须在Cat和Dog下分别实现一个Mating?
求解答
    public class Animal
    {
        public Animal Mating(Animal a)
        {
            return new Animal();
        }
    }

    public class Cat : Animal
    {
    }

    public class Dog : Animal
    {
    }

    class Program
    {
        static void Main(string[] args)
        {
            Dog d1 = new Dog();
            Dog d2 = new Dog();
            Dog d = d1.Mating(d2);            
        }
    }


------解决思路----------------------
public abstract class Animal
        {
            public abstract string Name { get; }
            public T Mating<T>(T a)
                where T : Animal, new()
            {
                return new T();
            }
        }

        public class Cat : Animal
        {
            public override string Name
            {
                get { return "Cat"; }
            }
        }

        public class Dog : Animal
        {
            public override string Name
            {
                get { return "Dog"; }
            }
        }

Dog d1 = new Dog();
            Dog d2 = new Dog();
            Dog d = d1.Mating(d2);
            Console.WriteLine(d.Name);

------解决思路----------------------

    public class Animal
    {
        public Animal Mating(Animal a)
        {
            return (Animal)Activator.CreateInstance(this.GetType());
        }
    }
 
    public class Cat : Animal
    {
        public new Cat Mating(Animal a)
        {
            if (!(a is Cat))
               throw new ArgumentExceiption();
            return (Cat)base.Mating(cat);
        }
    }
 
    public class Dog : Animal
    {
        public Dog Mating(Dog dog)
        {
            return (Dog)base.Mating(dog);
        }
    }


以上代码用两种方式实现你的需求
  相关解决方案