Der beste Weg, an den ich denken kann, ist dies.
In C# 5 wurde eine Reihe von Informationen zu Anruferinformationen hinzugefügt, nämlich [System.Runtime.CompilerServices.CallerMemberName]
, [System.Runtime.CompilerServices.CallerFilePath]
und [System.Runtime.CompilerServices.CallerLineNumber]
. Wir können die CallerFilePathAttribute
verwenden, um zu sehen, ob der Aufrufer aus einer bestimmten .cs
Datei stammt.
Normalerweise enthält eine Datei nur eine Klasse oder Struktur. Zum Beispiel ist ClassA
in ClassA.cs
definiert. Sie können überprüfen, ob der Name der Anruferdatei in der Methode mit ClassA.cs
übereinstimmt.
So Ihre Methode der Parameter wie folgt ändern:
([CallerFilePath] string callerFilePath = "" /*Other parameters*/)
In dem Verfahren prüfen, ob die callerFilePath
den Dateipfad von ClassA
übereinstimmt. Wenn dies nicht der Fall ist, wird eine Ausnahme ausgelöst, die besagt, dass auf die Methode nur von ClassA
zugegriffen werden kann!
Wenn Sie beiden Klassen in eine Assembly setzen gewidmet nur diese beiden Klassen können Sie 'internal' verwenden. Aber ... Sie sollten vielleicht überdenken, warum Sie das tun müssen. –
Was ist der Grund für diese Art von Design? – dotctor
Mögliche doppelte: http://stackoverflow.com/questions/203616/why-does-c-sharp-not-provide-the-c-style-friend-keyword –