In C# UI codes, when I create event methods, it gets automatically populated with
void simpleButton_click(object sender, Eventargs e)
{
}
What's the difference between this simple void
and private void
?
None, it's syntactical. By default members are private
while types are internal
).
Often people add private
for the sake of consistency, especially when it's in a class or type that has many other members with differing access attributes, such as protected internal
or public
.
So the following two files are equivalent:
using System;
namespace Foo
{
class Car : IVehicle
{
Car(String make)
{
this.Make = make;
}
String Make { get; set; }
CarEngine Engine { get; set; }
void TurnIgnition()
{
this.Engine.EngageStarterMotor();
}
class CarEngine
{
Int32 Cylinders { get; set; }
void EngageStarterMotor()
{
}
}
delegate void SomeOtherAction(Int32 x);
// The operator overloads won't compile as they must be public.
static Boolean operator==(Car left, Car right) { return false; }
static Boolean operator!=(Car left, Car right) { return true; }
}
struct Bicycle : IVehicle
{
String Model { get; set; }
}
interface IVehicle
{
void Move();
}
delegate void SomeAction(Int32 x);
}
using System;
namespace Foo
{
internal class Car : IVehicle
{
private Car(String make)
{
this.Make = make;
}
private String Make { get; set; }
private CarEngine Engine { get; set; }
private void TurnIgnition()
{
this.Engine.EngageStarterMotor();
}
private class CarEngine
{
private Int32 Cylinders { get; set; }
private void EngageStarterMotor()
{
}
}
private delegate void SomeOtherAction(Int32 x);
public static Boolean operator==(Car left, Car right) { return false; }
public static Boolean operator!=(Car left, Car right) { return true; }
}
internal struct Bicycle : IVehicle
{
private String Model { get; set; }
}
internal interface IVehicle
{
public void Move(); // this is a compile error as interface members cannot have access modifiers
}
internal delegate void SomeAction(Int32 x);
}
A summary of the rules:
class
, struct
, enum
, delegate
, interface
) defined directly in a namespace
are internal
by default.private
by default, with two exceptions:
public static
. You will get a compile error if you do not provide an explicit public
access modifier.public
and you cannot provide an explicit access modifier.class
and struct
members are private
by default, unlike C++ where struct
is public
by default and class
is private
by default.protected
or protected internal
in C#.internal
types and members are visible to code inside another assembly. C# requires the [assembly: InternalsVisibleTo]
attribute to achieve this. This is not the same thing as C++'s friend
feature (C++'s friend
allows a class
/struct
to list other classes, structs and free-functions that will have access to its private
members).If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With