Während meiner gesamten Studienzeit habe ich public
und würde gerne den Unterschied zwischen public
, private
y protected
?
Und was bedeutet static
tun, als nichts zu haben?
Während meiner gesamten Studienzeit habe ich public
und würde gerne den Unterschied zwischen public
, private
y protected
?
Und was bedeutet static
tun, als nichts zu haben?
using System;
namespace ClassLibrary1
{
public class SameAssemblyBaseClass
{
public string publicVariable = "public";
protected string protectedVariable = "protected";
protected internal string protected_InternalVariable = "protected internal";
internal string internalVariable = "internal";
private string privateVariable = "private";
public void test()
{
// OK
Console.WriteLine(privateVariable);
// OK
Console.WriteLine(publicVariable);
// OK
Console.WriteLine(protectedVariable);
// OK
Console.WriteLine(internalVariable);
// OK
Console.WriteLine(protected_InternalVariable);
}
}
public class SameAssemblyDerivedClass : SameAssemblyBaseClass
{
public void test()
{
SameAssemblyDerivedClass p = new SameAssemblyDerivedClass();
// NOT OK
// Console.WriteLine(privateVariable);
// OK
Console.WriteLine(p.publicVariable);
// OK
Console.WriteLine(p.protectedVariable);
// OK
Console.WriteLine(p.internalVariable);
// OK
Console.WriteLine(p.protected_InternalVariable);
}
}
public class SameAssemblyDifferentClass
{
public SameAssemblyDifferentClass()
{
SameAssemblyBaseClass p = new SameAssemblyBaseClass();
// OK
Console.WriteLine(p.publicVariable);
// OK
Console.WriteLine(p.internalVariable);
// NOT OK
// Console.WriteLine(privateVariable);
// Error : 'ClassLibrary1.SameAssemblyBaseClass.protectedVariable' is inaccessible due to its protection level
//Console.WriteLine(p.protectedVariable);
// OK
Console.WriteLine(p.protected_InternalVariable);
}
}
}
using System;
using ClassLibrary1;
namespace ConsoleApplication4
{
class DifferentAssemblyClass
{
public DifferentAssemblyClass()
{
SameAssemblyBaseClass p = new SameAssemblyBaseClass();
// NOT OK
// Console.WriteLine(p.privateVariable);
// NOT OK
// Console.WriteLine(p.internalVariable);
// OK
Console.WriteLine(p.publicVariable);
// Error : 'ClassLibrary1.SameAssemblyBaseClass.protectedVariable' is inaccessible due to its protection level
// Console.WriteLine(p.protectedVariable);
// Error : 'ClassLibrary1.SameAssemblyBaseClass.protected_InternalVariable' is inaccessible due to its protection level
// Console.WriteLine(p.protected_InternalVariable);
}
}
class DifferentAssemblyDerivedClass : SameAssemblyBaseClass
{
static void Main(string[] args)
{
DifferentAssemblyDerivedClass p = new DifferentAssemblyDerivedClass();
// NOT OK
// Console.WriteLine(p.privateVariable);
// NOT OK
//Console.WriteLine(p.internalVariable);
// OK
Console.WriteLine(p.publicVariable);
// OK
Console.WriteLine(p.protectedVariable);
// OK
Console.WriteLine(p.protected_InternalVariable);
SameAssemblyDerivedClass dd = new SameAssemblyDerivedClass();
dd.test();
}
}
}
Ich sehe nicht, was diese Antwort den vielen anderen Antworten der letzten fünf Jahre voraus hat.
Dies ist nur eine einfache Erklärung. Die anderen Antworten sind etwas verwirrend und halb beantwortet :)
@John Saunders: Er unterscheidet, indem er die Sichtbarkeit für eine abgeleitete Klasse zwischen der Klasse in derselben und der Klasse in einer anderen Assembly trennt. Außerdem gibt er an, wie er zu diesen Informationen gekommen ist, indem er seinen Beispielcode zeigt. Er ergänzt also die anderen Antworten. Sein Nekromantismus wurde wahrscheinlich durch meinen Kommentar in meiner Antwort ausgelöst.
Hm.
Siehe hier: Zugriffsmodifikatoren .
Kurz und bündig:
Public gibt der Methode oder dem Typ vollständige Sichtbarkeit für andere Typen/Klassen.
Private erlaubt nur dem Typ, der die private Methode/Variable enthält, den Zugriff auf die private Methode/Variable (beachten Sie, dass verschachtelte Klassen auch Zugriff auf die privaten Methoden/Variablen der enthaltenen Klassen haben).
Protected ist ähnlich wie private, außer dass abgeleitete Klassen auch auf geschützte Methoden zugreifen können.
"Nothing" ist das VB.NET-Äquivalent zu null. Obwohl, wenn Sie sich auf "nichts" beziehen, was "kein Zugriffsmodifikator" bedeutet, dann kommt es darauf an, obwohl eine sehr grobe Faustregel (sicherlich in C#) ist, dass, wenn Sie nicht explizit einen Zugriffsmodifikator angeben, die Methoden-/Variablendeklaration in der Regel so ist eingeschränkt wie es sein kann. d.h.
public class MyClass
{
string s = "";
}
ist praktisch dasselbe wie:
public class MyClass
{
private string s = "";
}
Der verlinkte MSDN-Artikel bietet eine vollständige Beschreibung, wenn kein Zugriffsmodifikator explizit angegeben ist.
öffentlich - kann von jedem und überall abgerufen werden.
privat - kann nur innerhalb der Klasse, zu der sie gehört, aufgerufen werden.
geschützt - kann nur von innerhalb der Klasse oder einem Objekt, das von der Klasse erbt, aufgerufen werden.
Nichts ist wie null, aber in VB.
Statisch bedeutet, dass Sie eine Instanz dieses Objekts haben, eine Methode für jede Instanz dieser Klasse.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.