|
You last visited: Today at 16:16
Advertisement
Coders Chit-Chat
Discussion on Coders Chit-Chat within the General Coding forum part of the Coders Den category.
07/29/2015, 17:24
|
#106
|
elite*gold: 0
Join Date: May 2010
Posts: 6,853
Received Thanks: 5,106
|
Bei einer abstrakten Klasse hast du die Möglichkeit eine Defaultimplementierung anzubieten. Bei einem Interface sagst du wirklich nur du hast Methode XY mit den Parameter abc von den Typen kij und dem Rückgabe wert v. Zudem kann man bei einem Interface auch keine Attribute angeben, wenn ich mich jetzt nicht Irre.
Weiterer Unterschied ist, dass Klassen nachher mehrere Interfaces implementieren können, aber immer von maximal einer (abstrakten) Klasse erben können.
|
|
|
07/29/2015, 17:40
|
#107
|
elite*gold: 192
Join Date: May 2009
Posts: 2,227
Received Thanks: 3,262
|
Das man eine default-Implementierung vornehmen kann, war mir nicht bewusst, aber wäre es dann nicht sinnvoller einfach eine normale Klasse zunehmen, und die Methoden einfach virtuell zu kennzeichnen?
Was würde bei folgendem Szenario passieren? Wie sähe hier die Implementierung aus? Soviel ich weiß, ist eine Methoden-Überladung nur durch unterschiedliche Signaturen, welche den Rückgabetyp nicht berücksichtigt, gültig. Würde es hierbei zu einem Konflikt kommen und ich müsste auf ein Interface ( ITest1 / ITest2) verzichten?
Code:
interface ITest1
{
int foo(int a, int b);
}
interface ITest2
{
void foo(int a, int b)
}
public sealed class CFoo : ITest1, ITest2
{
//........
}
Achja, bevor ich es vergesse: Sind alle Methoden, Eigenschaften und Felder automatisch statisch, wenn ich die Klasse mit dem static Modifizierer bestücke?
|
|
|
07/29/2015, 18:10
|
#108
|
elite*gold: 0
Join Date: May 2010
Posts: 6,853
Received Thanks: 5,106
|
Kannst glaube ich eine für beide Implementieren, oder für beide einzeln, indem du den Interfacenamen davor schreibst, da bin ich mir gerade nicht ganz sicher, sollte aber gehen.
Bei einer abstrakten Klassen kannst du auch kein Objekt direkt erzeugen, sondern nur von erbenden Klassen.
|
|
|
07/30/2015, 10:20
|
#109
|
dotCom
elite*gold: 9842
Join Date: Mar 2009
Posts: 16,840
Received Thanks: 4,675
|
Glaube das das einige noch nicht wussten :>
|
|
|
07/30/2015, 11:06
|
#110
|
elite*gold: 0
Join Date: May 2010
Posts: 6,853
Received Thanks: 5,106
|
Danke, find ich gut zu wissen, hat mir zwar noch nie bewusst Probleme gemacht aber damit hat man diverse Optimierungsmöglichkeiten, wenn man das weiß.
|
|
|
07/30/2015, 12:29
|
#111
|
elite*gold: 0
Join Date: Jul 2015
Posts: 192
Received Thanks: 67
|
Wenn wir schon beim Optimieren sind:
PHP Code:
if(isset($string[100])){ echo '$string ist zu lang'; }
ist schneller als:
PHP Code:
if(strlen($string) > 100){ echo '$string ist zu lang'; }
So was ist immer ganz interessant zu wissen
|
|
|
07/30/2015, 13:07
|
#112
|
dotCom
elite*gold: 9842
Join Date: Mar 2009
Posts: 16,840
Received Thanks: 4,675
|
Quote:
Originally Posted by Macina
Wenn wir schon beim Optimieren sind:
PHP Code:
if(isset($string[100])){ echo '$string ist zu lang'; }
ist schneller als:
PHP Code:
if(strlen($string) > 100){ echo '$string ist zu lang'; }
So was ist immer ganz interessant zu wissen 
|
Ich weiß momentan nicht welche von den abfragen in dem Fall schneller wäre.
PHP Code:
$string = "normaler string";
if(strlen($string) > 10){ echo $string .' =>ist zu lang [1]<br/>'; }
echo (strlen($string) > 10) ? $string .' =>ist zu lang [2]<br/>' : '';
|
|
|
07/30/2015, 13:36
|
#113
|
elite*gold: 0
Join Date: Jul 2015
Posts: 192
Received Thanks: 67
|
Quote:
Originally Posted by Devsome
Ich weiß momentan nicht welche von den abfragen in dem Fall schneller wäre.
PHP Code:
$string = "normaler string";
if(strlen($string) > 10){ echo $string .' =>ist zu lang [1]<br/>'; }
echo (strlen($string) > 10) ? $string .' =>ist zu lang [2]<br/>' : '';
|
Ich meine im Sinn zu haben das die inline ifs weniger performant sind.
Vorallem ist eine normale if lesbarer als die inline dinger.
|
|
|
07/30/2015, 14:23
|
#114
|
elite*gold: 0
Join Date: May 2015
Posts: 700
Received Thanks: 444
|
Quote:
Originally Posted by Macina
Wenn wir schon beim Optimieren sind:
PHP Code:
if(isset($string[100])){ echo '$string ist zu lang'; }
ist schneller als:
PHP Code:
if(strlen($string) > 100){ echo '$string ist zu lang'; }
So was ist immer ganz interessant zu wissen 
|
Ist die zweite Variante wegen der Lesbarkeit nicht trotzdem deutlich besser?
|
|
|
07/30/2015, 14:27
|
#115
|
elite*gold: 0
Join Date: Jul 2015
Posts: 192
Received Thanks: 67
|
Quote:
Originally Posted by algernong
Ist die zweite Variante wegen der Lesbarkeit nicht trotzdem deutlich besser?
|
Das stimmt, aber mit einem kleinem Kommentar (falls die meisten Programmierer so was überhaupt machen o,o) löst sich das ganze ja von selbst.
|
|
|
07/30/2015, 14:48
|
#116
|
elite*gold: 7110
Join Date: Jun 2009
Posts: 28,902
Received Thanks: 25,407
|
Das ist premature optimization. Nimm das was lesbarer ist.
Quote:
Originally Posted by Logtetsch
Das man eine default-Implementierung vornehmen kann, war mir nicht bewusst, aber wäre es dann nicht sinnvoller einfach eine normale Klasse zunehmen, und die Methoden einfach virtuell zu kennzeichnen?
Was würde bei folgendem Szenario passieren? Wie sähe hier die Implementierung aus? Soviel ich weiß, ist eine Methoden-Überladung nur durch unterschiedliche Signaturen, welche den Rückgabetyp nicht berücksichtigt, gültig. Würde es hierbei zu einem Konflikt kommen und ich müsste auf ein Interface ( ITest1 / ITest2) verzichten?
Code:
interface ITest1
{
int foo(int a, int b);
}
interface ITest2
{
void foo(int a, int b)
}
public sealed class CFoo : ITest1, ITest2
{
//........
}
Achja, bevor ich es vergesse: Sind alle Methoden, Eigenschaften und Felder automatisch statisch, wenn ich die Klasse mit dem static Modifizierer bestücke?
|
Wenn mehrere Interfaces die gleichen Methoden haben, ist das kein Problem. Es ist letztendlich nur ein Vertrag, der besagt, dass diese Methode vorhanden sein muss (Interfaces zu implementieren ist nicht dasselbe wie von einer abstrakten Klasse zu erben!). Wenn zwei Verträge die Methode fordern, erfüllst du trotzdem beide, auch wenn du die Methode nur einmal hast.
Bei Mehrfachvererbung wäre das nicht so einfach, aber die unterstützt C# ja nicht.
Wenn es übrigens keinen Grund für eine abstrakte Klasse oder überhaupt Vererbung gibt, ist ein Interface vorzuziehen. Kompositionen sind flexibler als Vererbung.
sealed solltest du übrigens ebenfalls nur verwenden, wenn du auch einen guten Grund dazu hast.
Nein,statische Klassen machen nicht automatisch alles statisch. Du musst die Sachen selbst als statisch deklarieren.
p.s. 
Optimal, wenn du dir solche Fragen stellst wie "Was ist wenn". Probieren geht über Studieren.
|
|
|
07/30/2015, 15:12
|
#117
|
dotCom
elite*gold: 9842
Join Date: Mar 2009
Posts: 16,840
Received Thanks: 4,675
|
|
|
|
07/31/2015, 09:24
|
#118
|
elite*gold: 34
Join Date: Apr 2011
Posts: 1,475
Received Thanks: 1,228
|
Quote:
Originally Posted by Devsome
|
Ich trage ne Brille, aber ich kann C#    
Der Witz ist aber schon älter hehe^^
Edit:
|
|
|
08/01/2015, 12:56
|
#119
|
elite*gold: 138
Join Date: Apr 2012
Posts: 3,494
Received Thanks: 1,769
|
Würde mich gerne für mein Informatikstudium vorbereiten. WS fängt erst in 2 Monaten an. Was würdet ihr vorschlagen? Programmiergrundkenntnisse kenne ich natürlich schon. Java und C# kann ich teilweise. Sollte ich eine der beiden, ich sag mal auf einem profi level können?
|
|
|
08/01/2015, 13:11
|
#120
|
elite*gold: 0
Join Date: Feb 2009
Posts: 1,137
Received Thanks: 573
|
Quote:
Originally Posted by Moneypulation
Würde mich gerne für mein Informatikstudium vorbereiten. WS fängt erst in 2 Monaten an. Was würdet ihr vorschlagen? Programmiergrundkenntnisse kenne ich natürlich schon. Java und C# kann ich teilweise. Sollte ich eine der beiden, ich sag mal auf einem profi level können?
|
Im Studium gibt es genug Leute die selbst nicht oder kaum programmieren können (bei mir waren es etwa 1/3 aller Info Studenten) Programmieren zu können ist hilfreich, aber auf "profi level" musst du es auf keinen Fall können. Und letztlich so viel Programmieren kommt auch nicht dran, eigentlich musst du nur Pseudocode lesen können (außer in modulen wie Programmierung etc). Ich würde eher wenn die Uni so etwas anbietet eine Mathe Vorkurs besuchen, und generell deine Mathekentnisse aufbereiten.
|
|
|
Similar Threads
|
CO 2 Chit-Chat
04/04/2013 - Conquer Online 2 - 3 Replies
Hello,
You are allowed to talk in this thread about all things belonging to CO2.
It does not matter whether you want to ask something or you just want to talk about CO2.
Posts like "lol" are forbidden!
|
All times are GMT +1. The time now is 16:18.
|
|