代码之家  ›  专栏  ›  技术社区  ›  kpollock

林福-看不懂怎么做

  •  1
  • kpollock  · 技术社区  · 16 年前

    刚找到林福-看起来很不错,但我不能 看看如何做我想做的事情-这是mixin的多重继承(构图/委托,就像我在VB5/6天中说的-当我有一个工具来生成冗长的重复委托代码-当我寻找一个C#等价物时,我找到了LinFu)。

    public class Person : NEOtherBase, IName, IAge 
    {
    
        public Person()
        {
    
        }
    
        public Person(string name, int age)
        {
            Name = name;
            Age = age;
        }
    
        //Name "Mixin" - you'd need this code in any object that wanted to
        //use the NameObject to implement IName
        private NameObject _nameObj = new NameObject();
    
        public string Name
        {
            get { return _nameObj.Name; }
            set { _nameObj.Name = value; }
        }
        //--------------------
    
        //Age "Mixin" you'd need this code in any object that wanted to
        //use the AgeObject to implement IAge
        private AgeObject _ageObj = new AgeObject();
    
        public int Age
        {
            get { return _ageObj.Age; }
            set { _ageObj.Age = value; }
        }
        //------------------
    
    }
    
    public interface IName
    {
        string Name { get; set; }
    }
    
    public class NameObject : IName
    {
        public NameObject()
        {}
    
        public NameObject(string name)
        {
            _name = name;
        }
    
        private string _name;
        public string Name { get { return _name; } set { _name = value; } }
    
    }
    
    public interface IAge 
    {
        int Age { get; set; }
    }
    
    public class AgeObject : IAge
    {
        public AgeObject()
        {}
    
        public AgeObject(int age)
        {
            _age = age;
        }
    
        private int _age;
        public int Age { get { return _age; } set { _age = value; } }
    
    }
    

    想象一下有更多属性的对象,在更多的“子类”中使用,你就会开始看到单调乏味。代码格伦工具实际上是 好的 ...

    所以,临福。。。。 (如上)-临福式的做法是什么?或者我错过了全部要点?

    编辑:我需要能够这样做的类已经是子类。

    DynamicObject dynamic = new DynamicObject();
    
    IPerson person = null;
    
    // This will return false
    bool isPerson = dynamic.LooksLike<IPerson>();
    
    // Implement IPerson
    dynamic.MixWith(new HasAge(18));
    dynamic.MixWith(new Nameable("Me"));
    
    // Now that it’s implemented, this
    // will be true
    isPerson = dynamic.LooksLike<IPerson>();
    
    if (isPerson)
        person = dynamic.CreateDuck<IPerson>();
    
    // This will return “Me”
    string name = person.Name;
    
    // This will return ‘18’
    int age = person.Age;
    
    0 回复  |  直到 16 年前
    推荐文章