本文概述
- 1)C#公共访问说明符
- 2)C#受保护的访问说明符
- 3)C#内部访问说明符
- 4)受C#保护的内部访问说明符
- 5)C#专用访问说明符
C#提供了五种类型的访问说明符。
- 公共的
- 受保护的
- 内部
- 内部保护
- 私人的
访问说明符 | 描述 |
---|---|
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#受保护的访问说明符它可以在该类中访问,并且范围有限。在继承的情况下,也可以在子类或子类中访问它。
例
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.
例2
在这里,我们通过继承访问子类中受保护的成员。
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#保护的内部访问说明符声明为protected internal的变量或函数可以在声明了该变量或函数的程序集中进行访问。也可以在另一个程序集中的派生类中访问它。
例
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#专用访问说明符私有访问说明符用于指定变量或函数的私有访问性。它是限制性最强的,并且只能在声明它的类的主体内访问。
例
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