Autor Beitrag
Frühlingsrolle
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2006
Erhaltene Danke: 366

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 04.07.17 19:10 
Hallo Forum

Problemstellung:
Bezüglich des Projektes hier bekam ich interessante Hinweise, die ich im Nachhinein doch nicht umzusetzen weiss:
user profile iconRalf Jansen hat folgendes geschrieben:
Es wäre schön wenn du IntPtr's verstecken könntest. Ein IntPtr sagt ja nicht wofür er steht darum liegt es nahe die immer mit einer passenden contextabhängigen Klasse zu kapseln an der man dann auch nur die entsprechenden auf diesen IntPtr möglichen Methoden kapselt.

Es ist einerlei einen Alias für den IntPtr bereitzustellen, wie ich es hier gemacht habe:
ausblenden C#-Quelltext
1:
using Volume = System.IntPtr;					

Dieser Alias ist auch nur in der bestehenden Klasse verfügbar, jedoch nicht außen, wo ein Objekt dieser Klasse erzeugt wird.
Ich denke, der Hinweis bezog sich auch nicht darauf, daher bin ich jetzt ein wenig überfragt, wie man sowas in C# umsetzt ?!
Es geht mir nicht nur um das verlinkte Projekt, sondern auch allgemein für zukünftige Projekte.

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4263
Erhaltene Danke: 851


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 04.07.17 20:23 
Anhand eines Beispiels ist das denke ich am einfachsten zu verstehen. Ich schreib mir sonst die Hände fusselig für eine eigentlich eher simple Sache :wink:
Ich nehme mal Pseudocode lose orientiert an deinem frDrive Code.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
// Benutzung ohne IntPtr oder Alias davon
using (var volume = Drive.GetVolume('c'))
{
    volume.Eject();
}


ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
public static class Drive
{
    public static IVolume GetVolume(char volume)
    {    
        return new Volume(volume);
    }
  
    internal class Volume : IVolume
    {
        private readonly IntPtr handle;
     
        public Volume(char volume)
        {
            this.handle = myLovelyApiMethodForGettingAVolume(volume);
        }
    
        public bool Eject()
        {
            return myLovelyApiMethodForEjectingAVolume(handle);
        }
    
        public void Close()
        {
            myLovelyApiMethodForClosingAVolume(handle);
        }
    
        public void Dispose()
        {
            Close();
        }
    }
}

public interface IVolume : IDisposable
{
    bool Eject();
    void Close();
}

Für diesen Beitrag haben gedankt: Frühlingsrolle
Frühlingsrolle Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2006
Erhaltene Danke: 366

[Win NT] 5.1 x86 6.1 x64
[Delphi] 7 PE, 2006, 10.1 Starter, Lazarus - [C#] VS Exp 2012 - [Android API 15] VS Com 2015, Eclipse, AIDE - [C++] Builder 10.1
BeitragVerfasst: Di 04.07.17 21:37 
So erscheint es mir auch einfach/er. :D Es ist etwas ungewohnt und auch nicht die Art, wie ich es umsetzen würde. Aber gut, jetzt habe ich einen Eindruck davon. Dankeschön Ralf Jansen!

Das Thema hat sich erledigt !!!

_________________
„Politicians are put there to give you the idea that you have freedom of choice. You don’t. You have no choice. You have owners. They own you. They own everything." (George Denis Patrick Carlin)