1.關於C#中的5種修飾符
public (公有的)誰都可以訪問
private (私有的)只限於本類成員訪問。 子類和實例都不能訪問。
protected (受保護的)只限於本類和子類訪問,實例不能訪問。
internal (內部的) 限於當前命名空間下訪問,其他命名空間不能訪問
protected internal(受保護內部的)只限於當前命名空間下的本類或子類訪問,實例和其他命名空間不能訪問
2.修飾符的詳細介紹
public (公有的)
public 共有的,這個比較好理解了,公有的也就是說誰都可以訪問它,不受任何限制,當前類,子類,實例對象,都可以訪問到。。
打個比方,就比如說家里有一個車,這個車主說了這是公用車,沒有鑰匙,誰來都可以用這個車,沒有什么限時。下面做個示例演示一下。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 測試
{
class Program
{
static void Main(string[] args)
{
// Text1是public 修飾的,所以在這里是可以訪問,創建實例的
Text1 text1 = new Text1();
// t 也是public 修飾的,所以在這里是可以訪問,並對其賦值
text1.vehicle = "怎么誰都能調用我!!! 原來我是public修飾過的";
// 這里通過類的示例名去調用類的方法,方法也public 修飾的
text1.show();
Console.ReadKey();
}
}
/// <summary>
/// 這個類 是用public 修飾的,就是說他是公有的 誰都可以訪問的
/// </summary>
public class Text1
{
public string vehicle;
/// <summary>
/// 這是一個public 修飾的測試方法,用來輸出的
/// </summary>
public void show()
{
// 這里是一個輸出語句
Console.WriteLine(vehicle);
}
}
}
private (私有的)
只能在當前類內部進行訪問使用,就算是子類,實例對象,都訪問不到。
還是以說家里的那個車,這回這個車主說了這是 私有的,就我一個人可以使用,其余的人誰也不行,就算是車主兒子也不能用。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 測試
{
class Program
{
static void Main(string[] args)
{
// Text1是public 修飾的,所以在這里是可以訪問,創建實例的
Text1 text1 = new Text1();
// 這里通過類的示例名去調用類的方法,方法也public 修飾的
text1.show();
Console.ReadKey();
}
}
/// <summary>
/// 這個類 是用public 修飾的,就是說他是公有的 誰都可以訪問的
/// </summary>
public class Text1
{
// 這是私有成員,他只能在Text1類中使用,在其他的地方是調用不到的
private string vehicle = "我是private修飾的,所以我只能在Text1中使用";
/// <summary>
/// 這是一個public 修飾的測試方法,用來輸出的
/// </summary>
public void show()
{
// 這里是一個輸出語句
Console.WriteLine(vehicle);
}
}
}
protected (受保護的)
保護訪問。只限於本類和子類訪問,實例不能訪問。
還是說家里的那個車,這回車主說了,這個車是我家的寶貝,除了我自己家人,誰也不能用,我誰都不借。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 測試
{
class Program
{
static void Main(string[] args)
{
// Text1是public 修飾的,所以在這里是可以訪問,創建實例的
Text1 text1 = new Text1();
// 這里通過類的示例名去調用類的方法,方法也public 修飾的
text1.show1();
Text2 text2 = new Text2();
text2.show2();
Console.ReadKey();
}
}
/// <summary>
/// 這個類 是用public 修飾的,就是說他是公有的 誰都可以訪問的
/// </summary>
public class Text1
{
// 這是受保護的成員,他只能在Text1和Text1的子類可以使用
protected string vehicle = "我是protected修飾的,所以我只能在Text1和Text1的子類可以使用";
/// <summary>
/// 這是一個public 修飾的測試方法,用來輸出的
/// </summary>
public void show1()
{
Console.WriteLine("這是父類調用vehicle");
// 這里是一個輸出語句
Console.WriteLine(vehicle);
}
}
/// <summary>
/// 這里是用public 修飾的,並且繼承 Text1
/// </summary>
public class Text2 : Text1
{
/// <summary>
/// 這是一個public 修飾的測試方法,用來輸出的
/// </summary>
public void show2()
{
Console.WriteLine("這是子類調用vehicle");
// 這里是一個輸出語句
Console.WriteLine(vehicle);
}
}
}
internal (內部的)
內部訪問。只限於本項目內訪問,也就是說可以在當前的命名空間下面內部隨意訪問,其他命名空間下面不能是訪問。
示例:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 測試
{
class Program
{
static void Main(string[] args)
{
// Text1是public 修飾的,所以在這里是可以訪問,創建實例的
Text1 text1 = new Text1();
text1.vehicle = "vehicle是在當前命名空間下面,可以訪問得到";
// 這里通過類的示例名去調用類的方法,方法也public 修飾的
text1.show1();
Console.ReadKey();
}
}
/// <summary>
/// 這個類 是用public 修飾的,就是說他是公有的 誰都可以訪問的
/// </summary>
public class Text1
{
// 這是內部的的成員,他只能在 測試這個命名空間下面被訪問
internal string vehicle ;
/// <summary>
/// 這是一個public 修飾的測試方法,用來輸出的
/// </summary>
public void show1()
{
Console.WriteLine("這是父類調用vehicle");
// 這里是一個輸出語句
Console.WriteLine(vehicle);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using 測試;
namespace 測試2
{
class Program
{
static void Main(string[] args)
{
// Text1是public 修飾的,所以在這里是可以訪問,創建實例的
Text1 text1 = new Text1();
//vehicle 成員是用 internal修飾的,所以無法訪問
//text1.vehicle = "無法訪問";
}
}
}
protected internal (受保護內部的)
這個 訪問修飾符 和protected 沒什么區別,這里是說內部受保護的,在外部訪問不到,protected受保護的,在外部同樣也訪問不到,至於在內部里面訪問,protected internal 和 單獨的protected 沒什么區別
