none
Interface,Type RRS feed

  • Frage

  • Hi,

    kann mir mal bitte jemand ein Beispiel geben, wie man selber so eine Art Api schreibt.

    Also einfach Interface, Klasse, Funktionen.

    Wie kann ich sicher erreichen, dass nur das enum, dieser Typ etc. verwendet wird.

    IntelliSense halt. Einfach dass ich das mal sehe.

    Geht ja sicher in die Richtung class : Where  etc.

    Vielleicht hat jemand ein Einführungsbeispiel parat. Wäre toll.

    Gruß, Markus

    Dienstag, 19. Dezember 2017 17:51

Antworten

  • Auch alle anderen Fragen von dir klingen sehr nach Sandra ;)

    Ein Interface ist nur ein Vertrag an den sich alle halten müssen. Sagen wir mal wir wollen auf Windows, Android und iOS entwickeln und uns einfach Dateien vom System holen. Dafür erstellen wir dann ein Interface wie dieses hier IAssets und implementieren es auf den Systemen Android, Windows (UWP), iOS. Über das Interface könnten wir uns jetzt eine Datei holen und es kann uns egal sein auf was für einem System wir grade sind.

    Ein weiteres Interface das Du dir anschauen kannst ist IDisposable. Implementierst Du dieses Interface in eine Klasse, könntest Du diese Klasse in einem Using Block verwenden


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Dienstag, 19. Dezember 2017 18:40
  • Hi,

    keine Ahnung, was Du meinst.

    Die Grundlagen zu Interface, Class, ... musst Du dir selbst aneignen.

    Intellisense liefert lediglich Unterstützung bei der Codeeingabe auf Basis der vorhandenen Objekte (Schnittstellen, Klassen, Methoden, usw.) und hat nichts mit einer API oder ähnlichem zu tun.

    Was nun class : Where ... mit deiner Frage (deren Inhalt ich aber eh nicht verstanden habe) zu tun haben soll, weiß ich dementsprechend auch nicht.

    Formular bitte deine Fragen so, dass man sie versteht.

    P.S.: Klingt verdächtig nach Sandra.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 19. Dezember 2017 18:03
    Moderator
  • Hallo,

    Wenn ich Add nehme muss ich new nehmen, weil Add in der Basis vorhanden ist. Nehme ich einen neuen Namen, entfällt das. Kann man das so einfach sagen.

    Nur soviel: "new" soll verdeutlichen, dass es in einer Basisklasse bereits ein gleichnamiges Element (Methode) gibt. Das ist prinzipiell zulässig und vermeidet lediglich eine Kompiler-Warnung, d.h. es geht auch ohne "new". Das Element in der Basisklasse kann "virtual" sein, muss es aber nicht. Virtuelle Methoden können mit override überschrieben werden. Oder mit new "versteckt" werden, wie auch nicht-virtuelle Methoden. Du solltest dir einfach mal ein eigenes Beispiel (Basisklasse, abgeleitete Klasse) machen und die geringfügigen Unterschiede herausfinden.

    Ein prägnantes Beispiel hast du doch schon selbst beigefügt ;-)

    Gruß

    Freitag, 29. Dezember 2017 19:36

Alle Antworten

  • Hi,

    keine Ahnung, was Du meinst.

    Die Grundlagen zu Interface, Class, ... musst Du dir selbst aneignen.

    Intellisense liefert lediglich Unterstützung bei der Codeeingabe auf Basis der vorhandenen Objekte (Schnittstellen, Klassen, Methoden, usw.) und hat nichts mit einer API oder ähnlichem zu tun.

    Was nun class : Where ... mit deiner Frage (deren Inhalt ich aber eh nicht verstanden habe) zu tun haben soll, weiß ich dementsprechend auch nicht.

    Formular bitte deine Fragen so, dass man sie versteht.

    P.S.: Klingt verdächtig nach Sandra.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Dienstag, 19. Dezember 2017 18:03
    Moderator
  • Auch alle anderen Fragen von dir klingen sehr nach Sandra ;)

    Ein Interface ist nur ein Vertrag an den sich alle halten müssen. Sagen wir mal wir wollen auf Windows, Android und iOS entwickeln und uns einfach Dateien vom System holen. Dafür erstellen wir dann ein Interface wie dieses hier IAssets und implementieren es auf den Systemen Android, Windows (UWP), iOS. Über das Interface könnten wir uns jetzt eine Datei holen und es kann uns egal sein auf was für einem System wir grade sind.

    Ein weiteres Interface das Du dir anschauen kannst ist IDisposable. Implementierst Du dieses Interface in eine Klasse, könntest Du diese Klasse in einem Using Block verwenden


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Dienstag, 19. Dezember 2017 18:40
  • Hi,

    ja. Die Idee ist.

    z.B. Ich habe eine Funktion Test(string i1, string i2, string i3)

         Wenn ich diese Funktion aufrufe muss ich zwingend 3 Parameter von diesem Typ übergeben,

         andernfalls meckert der Compiler sofort. Diese Richtung meine ich, dass man gleich im Compiler sieht.

    Gruß, Markus

    Mittwoch, 20. Dezember 2017 18:16
  • Wenn Du eine Methode anlegst die 3 Parameter vom Typ string erwartet und sie keine weiteren Überladungen hat dann wird dir VS und der Compiler ein Fehler melden. 


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Mittwoch, 20. Dezember 2017 18:25
  • Hi,
    ich meine diese Richtung.
    Wenn ich Add nehme muss ich new nehmen, weil Add in der Basis vorhanden ist.
    Nehme ich einen neuen Namen, entfällt das.
    Kann man das so einfach sagen.

    Zu dieser Thematik suche ich ein prägnantes Beispiel, über Möglichkeiten, Ansätze.

    Vielleicht noch das, dann kann man es abschließen.

    public interface IEntry
    {
    	String ToString();
    }
    
    public class Base : IEntry
    {
    	public Base() { }
    
    	public Base(String Price)
    	{
    		this.Price = Price;
    	}
    
    	public String Price { get; set; }
    
    	public override String ToString()
    	{
    		return this.Price;
    	}
    }
    
    public class ProgramA : Base
    {
    	public ProgramA() { }
    
    	public ProgramA(String Price)
    	{
    		if (Price == "\0")
    			Price = "";
    
    		this.Price = Price;
    	}
    
    	public override String ToString()
    	{
    		return this.Price;
    	}
    }
    
    
    public class MyList<T> : List<T> where T : IEntry
    {
    
    	public MyList()
    	{
    
    	}
    
    	public new bool Add(T input)
    	{
    		Base s = input as Base;   
    		if ((input != null) && (s != null) && (s.Price != null) && s.Price != "")
    		{
    			base.Add(input);
    			return true;
    		}
    		return false;
    	}
    	
    	public bool MyAdd(T input)
    	{
    		Base s = input as Base;   
    		if ((input != null) && (s != null) && (s.Price != null) && s.Price != "")
    		{
    			base.Add(input);
    			return true;
    		}
    		return false;
    	}
    }

    Gruß, Markus

    Donnerstag, 21. Dezember 2017 17:49
  • Hi,

    ich meine diese Richtung.
    Wenn ich Add nehme muss ich new nehmen, weil Add in der Basis vorhanden ist.
    Nehme ich einen neuen Namen, entfällt das.
    Kann man das so einfach sagen.

    eigentlich fällt mir leider nur wieder eins ein:

    Was zur Hölle meinst Du?


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Donnerstag, 21. Dezember 2017 18:02
    Moderator
  • Ich denke mal Du verwechselst hier Interface und abstrakte Klassen 


    Gruß Thomas
    Sage nie, ich kann es nicht - sage nur, ich kann es noch nicht!
    Dev Apps von mir: Icon für UWP,  UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Donnerstag, 21. Dezember 2017 18:04
  • Hallo,

    Wenn ich Add nehme muss ich new nehmen, weil Add in der Basis vorhanden ist. Nehme ich einen neuen Namen, entfällt das. Kann man das so einfach sagen.

    Nur soviel: "new" soll verdeutlichen, dass es in einer Basisklasse bereits ein gleichnamiges Element (Methode) gibt. Das ist prinzipiell zulässig und vermeidet lediglich eine Kompiler-Warnung, d.h. es geht auch ohne "new". Das Element in der Basisklasse kann "virtual" sein, muss es aber nicht. Virtuelle Methoden können mit override überschrieben werden. Oder mit new "versteckt" werden, wie auch nicht-virtuelle Methoden. Du solltest dir einfach mal ein eigenes Beispiel (Basisklasse, abgeleitete Klasse) machen und die geringfügigen Unterschiede herausfinden.

    Ein prägnantes Beispiel hast du doch schon selbst beigefügt ;-)

    Gruß

    Freitag, 29. Dezember 2017 19:36