Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   C# Kovarianz in C#? (https://www.delphipraxis.net/112444-kovarianz-c.html)

phXql 21. Apr 2008 15:30


Kovarianz in C#?
 
Hallo Leute,

folgender Code
Code:
class A
{
  public virtual A Foo()
  {
    return new A();
  }
}
   
class B: A
{
  public override B Foo()
  {
    return new B();
  }
}
wirft den Fehler
Code:
'Covariant.Program.B.Foo()': return type must be 'Covariant.Program.A' to match overridden member 'Covariant.Program.A.Foo()' (CS0508)
Sollte das die Kovarianz nicht zulassen? Ich meine mich erinnern zu können, dass sowas in Java geht.

alias5000 21. Apr 2008 16:13

Re: Kovarianz in C#?
 
Wie wärs damit?
Code:
class A
{
  public virtual A Foo()
  {
    return new A();
  }
}
   
class B: A
{
  public override A Foo()
  {
    return new B();
  }
}
Die Änderung ist nur, dass B.Foo auch den Rückgabetyp A hat.

Gruß
alias5000

phXql 21. Apr 2008 16:52

Re: Kovarianz in C#?
 
Wo der "Fehler" liegt ist mir klar. Aber wieso kann Java das (was man als Kovarianz bezeichnet) und C# nicht?

s-off 21. Apr 2008 17:10

Re: Kovarianz in C#?
 
Zitat:

Zitat von phXql
Aber wieso kann Java das (was man als Kovarianz bezeichnet) und C# nicht?

Was ist das für eine Frage?

phXql 21. Apr 2008 17:16

Re: Kovarianz in C#?
 
Wieso kann Java Kovarianz bei Vererbung und C# nicht?
Jetz kapiert? :roll:

s-off 21. Apr 2008 17:18

Re: Kovarianz in C#?
 
Mensch Junge,

'kapiert' habe ich Deine Frage schon vor Deiner ausführlichen Erläuterung...

Warum kann man mit einem Staubsauger keine Heizung entlüften?

Jetzt 'kapiert'?

Apollonius 21. Apr 2008 17:28

Re: Kovarianz in C#?
 
@phXql: Kovarianz und Kontravarianz gibt es in C# nur für Delegates. Quelle

Khabarakh 21. Apr 2008 17:43

Re: Kovarianz in C#?
 
C# unterstützt Ko- und Kontravarianz nur bei Arrays und Methodengruppen->Delegates, die CLR kennt außerdem variante Interfaces und Delegates; heißt also warten auf eine zukünftige CLR ;) . Eric Lippert (C#-Team) hat übrigens zu dem Thema eine ganze Serie geschrieben.

phXql 21. Apr 2008 18:56

Re: Kovarianz in C#?
 
Zitat:

Zitat von s-off
Mensch Junge,

'kapiert' habe ich Deine Frage schon vor Deiner ausführlichen Erläuterung...

Warum kann man mit einem Staubsauger keine Heizung entlüften?

Jetzt 'kapiert'?

Ich dachte C# würde in Sachen Objektorientierung und Fähigkeiten Java in nichts nachstehen. Von dem her verstehe ich deinen Vergleich nun nicht wirklich. Oder ist Java zu C# konzeptionell so unterschiedlich? ;)

An alle: Danke für die Beantwortung meiner Frage. Dann muss ich wohl warten...

s-off 21. Apr 2008 19:24

Re: Kovarianz in C#?
 
Zitat:

Zitat von phXql
Ich dachte C# würde in Sachen Objektorientierung und Fähigkeiten Java in nichts nachstehen. Von dem her verstehe ich deinen Vergleich nun nicht wirklich. Oder ist Java zu C# konzeptionell so unterschiedlich? ;)

Mir ist vollkommen klar, worauf Du hinaus wolltest - ich dachte eigentlich, Du würdest irgendwann merken, dass ich mich absichtlich stur stelle, und Deine Frage anders formulieren ;)

Obwohl C# aus der Reihe der C-Sprachen kommt, ist sie Java schon ähnlicher, als bspw. C++ - aber das weißt Du ja sicher.
Das impliziert aber nicht, dass alle Features der einen, auch Bestandteil der anderen Sprache sind.

Aber es ist doch umso schöner, dass man sich noch auf etwas freuen kann, was vielleicht irgendwann einmal kommen wird ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz