[C#] Vraag over interfaces met generieke parameter

Pagina: 1
Acties:

Onderwerpen

Vraag


  • F.Scheltens
  • Registratie: Mei 2014
  • Laatst online: 11-02-2023
Beste allemaal,

ik heb in C# een interface welke ik heb gekopieerd van het internet:
public interface IDeepCloneable
{
object DeepClone();
}

public interface IDeepCloneable<T> : IDeepCloneable where T : class
{
new T DeepClone();
}
Deze wordt als volgt geimplementeerd:
public class ClassName : IDeepCloneable
{
...
object IDeepCloneable.DeepClone()
{
return this.DeepClone<ClassName>();
}

public virtual ClassName DeepClone<Name>() where Name: ClassName, new()
{
Name new_vm = (Name)this.MemberwiseClone();
return new_vm;
}
}
tot dusver gaat alles goed. Maar als ik een object probeer te kopieren krijg ik een foutmelding:

ClassName vm = this.DeepClone(); //resulteert in: Error CS0411 The type arguments for method //'ClassName.DeepClone<Name>()' cannot be inferred from the usage. Try specifying the type arguments explicitly.

ClassName vm = this.DeepClone<ClassName>(); //Dit werkt wel.

Mijn vraag is nu: Hoe roep ik dan, zonder foutmelding, de generieke functie aan die een object retourneert?

Alle reacties


  • ElCondor
  • Registratie: Juni 2001
  • Laatst online: 18:58

ElCondor

Geluk is Onmisbaar

Zet de boel eerst eens in
code:
1
[code][/code]
tags.

[ Voor 11% gewijzigd door ElCondor op 28-12-2017 10:23 ]

Hay 365 dias en un año y 366 occasiones para festejar (Boliviaans spreekwoord)


  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
F.Scheltens schreef op donderdag 28 december 2017 @ 03:43:
ik heb in C# een interface welke ik heb gekopieerd van het internet:
Voor support op code van derden mag je, in principe, aankloppen bij die derden ;) Maar begin eens met het vermelden van de bron zodat we daar ook een kijkje kunnen werpen. Verder zou het helpen als je je code plaatst tussen code tags. En tot slot wil ik je vragen voortaan onze Quickstart te hanteren bij 't openen van een topic; ik mis nogal wat zaken daaruit namelijk ;) Vul je topicstart even aan met die zaken a.u.b. :)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • +1 Henk 'm!

  • Xorecs
  • Registratie: Januari 2006
  • Laatst online: 17-09 13:32
Ik zal toch eens beginnen met het implementeren van de juiste interface:

C#:
1
public class ClassName : IDeepCloneable<ClassName>


Dan kan je daarna fatsoenlijk je DeepClone methode implementeren...

Acties:
  • 0 Henk 'm!

  • Tweezitsbank
  • Registratie: December 2016
  • Niet online

Tweezitsbank

Relax...

Werkt dit wellicht?
code:
1
2
IDeepCloneable cloneable = this;
object clone = cloneable.DeepClone();

Ik heb even geen c# op deze pc dus heb het niet getest.

Of korter (maar minder leesbaar IMO):
code:
1
object clone = ((IDeepCloneable)this).DeepClone();


De niet generieke IDeepCloneable is expliciet geimplementeerd zoals dat zo mooi heet. Hier staat meer info over dit onderwerp:
https://docs.microsoft.co...-interface-implementation