C# 访问修饰符
C# 访问修饰符/说明符
C# 访问修饰符或说明符是用于指定 C# 应用程序中变量和函数的可访问性或范围的关键字。
C# 提供了五种类型的访问说明符。
Public
Protected
Internal
Protected internal
Private
我们可以选择其中任何一种来保护我们的数据。 Public 不受限制,而 Private 受限制最多。下表描述了每个的可访问性。
访问说明符 |
说明 |
Public |
它指定访问不受限制。 |
Protected |
它指定访问仅限于包含类或派生类。 |
Internal |
它指定访问仅限于当前程序集。 |
protected internal |
它指定访问仅限于当前程序集或从包含类派生的类型。 |
Private |
它指定访问仅限于包含类型。 |
现在,让我们创建示例来检查每个访问说明符的可访问性。
1) C# 公共访问说明符
它使数据可以公开访问。它不限制数据到声明的块。
示例
using System;
namespace AccessSpecifiers
{
class PublicTest
{
public string name = "Shantosh Kumar";
public void Msg(string msg)
{
Console.WriteLine("Hello " + msg);
}
}
class Program
{
static void Main(string[] args)
{
PublicTest publicTest = new PublicTest();
// Accessing public variable
Console.WriteLine("Hello " + publicTest.name);
// Accessing public function
publicTest.Msg("Peter Decosta");
}
}
}
输出:
Hello Shantosh Kumar
Hello Peter Decosta
2) C# Protected Access Specifier
它可以在类内访问并且范围有限。在继承的情况下,它也可以在子类或子类中访问。
示例
using System;
namespace AccessSpecifiers
{
class ProtectedTest
{
protected string name = "Shashikant";
protected void Msg(string msg)
{
Console.WriteLine("Hello " + msg);
}
}
class Program
{
static void Main(string[] args)
{
ProtectedTest protectedTest = new ProtectedTest();
// Accessing protected variable
Console.WriteLine("Hello "+ protectedTest.name);
// Accessing protected function
protectedTest.Msg("Swami Ayyer");
}
}
}
输出:
Compile time error
'ProtectedTest.name' is inaccessible due to its protection level.
Example2
这里,我们通过继承访问子类中的受保护成员。
using System;
namespace AccessSpecifiers
{
class ProtectedTest
{
protected string name = "Shashikant";
protected void Msg(string msg)
{
Console.WriteLine("Hello " + msg);
}
}
class Program : ProtectedTest
{
static void Main(string[] args)
{
Program program = new Program();
// Accessing protected variable
Console.WriteLine("Hello " + program.name);
// Accessing protected function
program.Msg("Swami Ayyer");
}
}
}
输出:
Hello Shashikant
Hello Swami Ayyer
3) C# 内部访问说明符
internal 关键字用于指定变量和函数的内部访问说明符。此说明符只能在同一程序集中的文件中访问。
示例
using System;
namespace AccessSpecifiers
{
class InternalTest
{
internal string name = "Shantosh Kumar";
internal void Msg(string msg)
{
Console.WriteLine("Hello " + msg);
}
}
class Program
{
static void Main(string[] args)
{
InternalTest internalTest = new InternalTest();
// Accessing internal variable
Console.WriteLine("Hello " + internalTest.name);
// Accessing internal function
internalTest.Msg("Peter Decosta");
}
}
}
输出:
Hello Shantosh Kumar
Hello Peter Decosta
4) C# 受保护的内部访问说明符
声明的变量或函数 受保护的内部 可以在声明它的程序集中访问。它也可以在另一个程序集中的派生类中访问。
示例
using System;
namespace AccessSpecifiers
{
class InternalTest
{
protected internal string name = "Shantosh Kumar";
protected internal void Msg(string msg)
{
Console.WriteLine("Hello " + msg);
}
}
class Program
{
static void Main(string[] args)
{
InternalTest internalTest = new InternalTest();
// Accessing protected internal variable
Console.WriteLine("Hello " + internalTest.name);
// Accessing protected internal function
internalTest.Msg("Peter Decosta");
}
}
}
输出:
Hello Shantosh Kumar
Hello Peter Decosta
5) C# Private Access Specifier
Private Access Specifier 用于指定对变量或函数的私有访问。它是最严格的,并且只能在声明它的类的主体内访问。
示例
using System;
namespace AccessSpecifiers
{
class PrivateTest
{
private string name = "Shantosh Kumar";
private void Msg(string msg)
{
Console.WriteLine("Hello " + msg);
}
}
class Program
{
static void Main(string[] args)
{
PrivateTest privateTest = new PrivateTest();
// Accessing private variable
Console.WriteLine("Hello " + privateTest.name);
// Accessing private function
privateTest.Msg("Peter Decosta");
}
}
}
输出:
Compile time error
'PrivateTest.name' is inaccessible due to its protection level.
C# 私有说明符示例 2
using System;
namespace AccessSpecifiers
{
class Program
{
private string name = "Shantosh Kumar";
private void Msg(string msg)
{
Console.WriteLine("Hello " + msg);
}
static void Main(string[] args)
{
Program program = new Program();
// Accessing private variable
Console.WriteLine("Hello " + program.name);
// Accessing private function
program.Msg("Peter Decosta");
}
}
}
输出:
Hello Shantosh Kumar
Hello Peter Decosta