C# C语言中的泛型修饰符#
我想知道,既然没有办法在C#(是吗?)中实现这样的泛型装饰器类:C# C语言中的泛型修饰符#,c#,generics,aop,postsharp,C#,Generics,Aop,Postsharp,我想知道,既然没有办法在C#(是吗?)中实现这样的泛型装饰器类: public class Decorator<TDecoratorIterface> : TDecoratorInterface { public TDecoratorInterface Component {get; private set;} protected Decorator(TDecoratorInterface component) { Component =
public class Decorator<TDecoratorIterface> : TDecoratorInterface
{
public TDecoratorInterface Component {get; private set;}
protected Decorator(TDecoratorInterface component)
{
Component = component;
}
}
public interface IDogDecorator
{
void Bark();
}
public class Dog : IDogDecorator
{
public void Bark()
{
Console.Write("I am a dog");
}
}
public class StinkingDog : Decorator<IDogDecorator>
{
public StinkingDog(IDogDecorator dog):base(dog)
{
}
public void Bark()
{
Component.Bark();
Console.WriteLine(" and I stink");
}
}
公共类装饰器:TDecoratorInterface
{
公共TDecoratorInterface组件{get;private set;}
受保护的装饰器(TDecorator接口组件)
{
组件=组件;
}
}
这样使用:
public class Decorator<TDecoratorIterface> : TDecoratorInterface
{
public TDecoratorInterface Component {get; private set;}
protected Decorator(TDecoratorInterface component)
{
Component = component;
}
}
public interface IDogDecorator
{
void Bark();
}
public class Dog : IDogDecorator
{
public void Bark()
{
Console.Write("I am a dog");
}
}
public class StinkingDog : Decorator<IDogDecorator>
{
public StinkingDog(IDogDecorator dog):base(dog)
{
}
public void Bark()
{
Component.Bark();
Console.WriteLine(" and I stink");
}
}
公共接口IDogDecorator
{
空树皮();
}
公家犬:IDogDecorator
{
公共空间
{
安慰。写下(“我是一只狗”);
}
}
公共级臭狗:装饰师
{
公共臭狗(IDogDecorator狗):基地(狗)
{
}
公共空间
{
树皮成分();
控制台。WriteLine(“我很臭”);
}
}
这样的事情可以通过PostSharp或任何其他.NET AOP框架来管理吗
感谢您的回答,我花了半天时间试图创建这样一个构造,但没有成功,因此非常感谢您的帮助:)这个构造没有直接的等价物,因为C不允许类型的基类是动态的。请记住,泛型类型必须在编译时完全定义,而不是在使用时 有多种可能的方法:在上面的例子中,臭狗应该只实现IDogDecorator接口。因此,只需在此处指定。不管怎样,你都在转接电话
public class StinkingDog : Decorator<IDogDecorator>, IDogDecorator
公共类臭狗:装饰者,IDogDecorator
可能会有一些框架完全按照您的要求来做(例如Rhino.Mocks实际上就是这样创建mock的),但是对于生产代码,我建议不要使用任何AOP方法。它又笨又慢