20. december 2010 - 13:48Der er
7 kommentarer og 1 løsning
Hjælp til generic og nedarvning
Jeg har en masse klasser bestående af attributter med dertilhørende get og set metoder. på nogle af disse, har jeg i nogle tilfælde brug for at udvide dem med et par ekstra attributter. Det vil jeg så gøre ved at lave en klasse som nedarver fra en Generisk klasse, men hvordan gør man det?
Mit eneste bud er nedenstående som ikke virker. public class ItemExtension<T> : T { ...... }
Med kunstig intelligens skaber HP’s nye OmniBook X 14 en unik og skræddersyet brugeroplevelse målrettet dem, der ønsker høj ydeevne og intelligente funktioner
Her er et super skummelt eksempel med Castle DynamicProxy.
using System; using System.Reflection;
using Castle.Core; using Castle.Core.Interceptor; using Castle.DynamicProxy;
namespace E { // this is what we have public class C1 { public void M1() { Console.WriteLine("C1 M1"); } } public class C2 { public void M2() { Console.WriteLine("C1 M1"); } } // this is what we need to have to extend both C1 and C2 public class CX { public void MX() { Console.WriteLine("CX MX"); } } // helper stuff public interface I1 { void M1(); } public interface I2 { void M2(); } public interface IX { void MX(); } public interface IA : IX,I1,I2 { } public class C1D : C1, I1 { } public class C2D : C2, I2 { } public class CXD : CX, IX { } public static class ProxyHelper { public static TA CreateWrapper<TXC,T1C,T2C,TA>(this ProxyGenerator gen) where T1C : new() where T2C : new() { ProxyGenerationOptions opt = new ProxyGenerationOptions(); opt.AddMixinInstance(new T1C()); opt.AddMixinInstance(new T2C()); return (TA)gen.CreateClassProxy(typeof(TXC), new Type[] { typeof(TA) }, opt); } } // demo public class Program { public static void Main(string[] args) { ProxyGenerator gen = new ProxyGenerator(); IA o = gen.CreateWrapper<CXD,C1D,C2D,IA>(); o.M1(); o.M2(); o.MX(); Console.ReadKey(); } } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.