Oprettet man. d. 20. december 2010 kl. 13:48:19

pnr
pnr (9.329 point. Point ude: 60)

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
{
  ......
}

På forhånd mange tak for hjælpen!

Skrevet man. d. 20. december 2010 kl. 13:54:10| #1

bvli
bvli (21.365 point)
Jeg regner med, at du mener properties i stedet for attributter.

Nedarve fra en generisk klasse:

public class ExtendedClass<T> : BaseClass<T> {

}

Eller:

public class ExtendedStringClass : BaseClass<string> {

}

Skrevet man. d. 20. december 2010 kl. 14:43:15| #2

pnr
pnr (9.329 point)
Hej bvli og mange tak for din kommentar!

Jeg tror ikke at jeg har formuleret mig rigtigt, beklager. Her kommer et lille eksempel:

public class Vare
{
        public int VareId { get; set; }
        public string VareTekst { get; set; }
}

public class Kunde
{
        public int KundeId { get; set; }
        public string Note { get; set; }
}

nu vil jeg gerne lave en klasse som kan nedarve for begge ovenstående klasser og evt. flere.

public class ExtendedClass<T> : ???{

}

Håber at det give mening :-)

Skrevet man. d. 20. december 2010 kl. 14:56:50| #3

arne_v
arne_v (1.016.169 point)
C# tillader ikke at en klasse arver fra flere klasser.

Og naeppe heller i denne variant.

Skrevet man. d. 20. december 2010 kl. 14:57:52| #4

arne_v
arne_v (1.016.169 point)
Enten skal din Vare og Kunde klasse arve fra en faelles klasse med den faelles funktionalitet.

Eller saa skal du til at rode med noget AOP/dynamisk proxy.

Skrevet man. d. 20. december 2010 kl. 15:02:52| #5

pnr
pnr (9.329 point)
Træls...

Mange tak for kommentarene arne_v, smid et svar så er der point!

Skrevet ons. d. 22. december 2010 kl. 03:25:33| #6

arne_v
arne_v (1.016.169 point)
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();
        }
    }
}

Skrevet ons. d. 22. december 2010 kl. 03:25:48| #7

arne_v
arne_v (1.016.169 point)
og et svar

Skrevet ons. d. 22. december 2010 kl. 06:35:43| #8

pnr
pnr (9.329 point)
Mange tak for det Arne!!

Skriv et indlæg




Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] [img]link til billede[/img]
Web- og emailadresser omdannes automatisk til links

Log ind

   

   

Seneste spørgsmål

Print fra Windows Service på Win2008

Oprettet den 24. maj 2012 kl. 11.17
jps6kb giver 200 point for svar | Giv et svar »

Udskrive en Breadcrumb (Jeg er her >>)

Oprettet den 18. maj 2012 kl. 12.04
Qbruger giver 200 point for svar | Giv et svar »

Hjælp til at lokalisere fejl i CMS (synkron.via) dll

Oprettet den 16. maj 2012 kl. 19.31
jokkejensen giver 200 point for svar | Giv et svar »



   




Tips & Tricks fra PC World

Teaser billede

Læserne: Her er vores værste it-indkøb

Det er ikke al it-udstyr, som er det rene guld. Her er nogle af læsernes skrækhistorier.


Anmeldelser fra PC World

Teaser billede

Test: Mobil med Ferrari-design - og en Trabant-motor

Motorola har begået endnu en smartphone med lækkert design og potentiale til at være blandt de bedste. Men den når ikke i mål. Se her hvorfor.


Seneste blogindlæg

Teaser billede

Tvangslukke spørgsmål: Hvad er den bedste løsning?

Hej Vi har mange åbne spørgsmål på Eksperten. Vi ville gerne tvangslukke dem - så et spørgsmål efter f.eks. 6 måneder lukkes. Men der er et par uklarheder som ville være gode at få lidt input til:...


Nyheder fra PC World

Teaser billede

Sådan siger du farvel til Facebook

Læs her, hvordan du dropper Facebook og i stedet anvender nogle brugervenlige alternativer, så du stadig kan være social på nettet.


Nyheder fra Computerworld

Teaser billede

Galleri: De fedeste håndholdte gennem 40 år

Her har du de mest banebrydende håndholdte computere gennem alle tider.


Kurser
Samarbejdspartnere

Udgiver · © 2012 IDG Danmark A/S · Hørkær 18 · 2730 Herlev · Tlf.: 77 300 300 · Fax: 77 300 301 · Brug af personoplysninger