LinFu - не совсем понимаю, как делать то, что я хочу
Только что нашел LinFu - выглядит очень впечатляюще, но я не совсем понимаю, как сделать то, что я хочу сделать - множественное наследование по 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; } }
}
Представьте себе объекты со многими другими свойствами, которые используются во многих "подклассах", и вы начинаете видеть скуку. Инструмент кодирования кода на самом деле будет очень хорошо...
Итак, LinFu.... Приведенный ниже пример mixin - это хорошо, но я бы хотел иметь реальный класс Person (как выше) - как это сделать в стиле LinFu? Или я пропустил весь смысл?
РЕДАКТИРОВАТЬ: Мне нужно быть в состоянии сделать это с классами, которые уже подклассы.
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;