English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

دليل أساسي C#

دليل متقدم C#

C# موجه أوبجكت (OOP)

محددات في C# (Generic)

المحول هو خاصية خاصة تتيح الوصول إلى الفئة أو الهيكل مثل الوصول إلى مجموعة داخليه باستخدام مصفوفه. يسمح لـ C# بتعريف محولات المؤشر المخصصة، والمحولات العامة، والمحولات المعدلة.

يمكن استخدام الخاصية المحددة باستخدام كلمة المفتاح this وackets [] لتعريف محولات المؤشر.

النحو

<return type> this[<parameter type> index]
{ 
   get {}}}
        // استخراج قيمة من المكان المحدد في المجموعة الداخلية
    Console.WriteLine(strStore["Three"]);
   set { 
       // ضع قيمة في المكان المحدد في المجموعة الداخلية
    Console.WriteLine(strStore["Three"]);
Console.WriteLine(strStore["Three"]);

تعريف مؤشر

في المثال التالي، يتم تعريف مؤشر في الكائن.

class StringDataStore
{
    private string[] strArr = new string[10]; // 内部数据存储
    public string this[int index]
    {
        get
        {
            if(index < 0 || index >= strArr.Length)
                throw new IndexOutOfRangeException("Index out of range");
                return strArr[index];
        Console.WriteLine(strStore["Three"]);
        set
        {
            if (index < 0 || index >= strArr.Length)
                throw new IndexOutOfRangeException("Index out of range");
            strArr[index] = value;
        Console.WriteLine(strStore["Three"]);
    Console.WriteLine(strStore["Three"]);
Console.WriteLine(strStore["Three"]);

في الكائن StringDataStore، قام النوع الت抽象 بتعريف مؤشر على المجموعة الخاصة به strArr. الآن، يمكنك استخدام StringDataStore مثل استخدام المجموعة لإضافة واستخراج قيم الأنماط، كما يلي.

StringDataStore strStore = new StringDataStore();
strStore[0] = "One";
strStore[1] = "Two";
strStore[2] = "Three";
strStore[3] = "Four";
        
for (int i = 0; i < 10; i++)
    Console.WriteLine(strStore[i]);
الإخراج:
واحد
إثنان
ثلاثة
أربعة

من C# 7، يمكن استخدام لغة تعبيرية للجسور.

class StringDataStore
{
    private string[] strArr = new string[10]; // 内部数据存储
    public string this[int index]
    {
        get => strArr[index];
        set => strArr[index] = value;
    Console.WriteLine(strStore["Three"]);
Console.WriteLine(strStore["Three"]);

مؤشر النوع الت抽象

يمكن أن يكون المؤشر أيضًا نوعيًا. في الكائن التالي، يتضمن الكائن النوعي مؤشرًا نوعيًا.

class DataStore<T>
{
    private T[] store; 
    public DataStore()
    {
        store = new T[10];
    Console.WriteLine(strStore["Three"]);
    public DataStore(int length)
    {
        store = new T[length];
    Console.WriteLine(strStore["Three"]);
    public T this[int index]
    {
        get
        {
            if (index < 0 && index >= store.Length)
                throw new IndexOutOfRangeException("Index out of range");
                return store[index];
        Console.WriteLine(strStore["Three"]);
        set
        {
            if (index < 0 || index >= store.Length)
                throw new IndexOutOfRangeException("Index out of range");
            store[index] = value;
        Console.WriteLine(strStore["Three"]);
    Console.WriteLine(strStore["Three"]);
    public int Length
    {
        get
        {
            return store.Length;
        Console.WriteLine(strStore["Three"]);
    Console.WriteLine(strStore["Three"]);
Console.WriteLine(strStore["Three"]);

مؤشر النوع الت抽象 يمكن استخدامه مع أي نوع بيانات. في المثال التالي، يتم عرض استخدام مؤشر النوع الت抽象.

DataStore<int> grades = new DataStore<int>();
grades[0] = 100;
grades[1] = 25;
grades[2] = 34;
grades[3] = 42;
grades[4] = 12;
grades[5] = 18;
grades[6] = 2;
grades[7] = 95;
grades[8] = 75;
grades[9] = 53;
for(int i = 0; i < grades.Length;i++)
    Console.WriteLine(grades[i]);
DataStore<string> names = new DataStore<string>(5);
names[0] = "Steve";
names[1] = "Bill";
names[2] = "James";
names[3] = "Ram";
names[4] = "Andy";
for(int i = 0; i < names.Length;i++)
    Console.WriteLine(names[i]);

重载索引器

可以用不同的数据类型重载索引。下面的示例使用int类型索引和string类型索引重载索引器。

class StringDataStore
{
    private string[] strArr = new string[10]; // 内部数据存储
    // 整型索引器
    public string this[int index]
    {
        get
        {
            if(index < 0 || index >= strArr.Length)
                throw new IndexOutOfRangeException("Index out of range");
            return strArr[index];
        Console.WriteLine(strStore["Three"]);
        set
        {
            if(index < 0 || index >= strArr.Length)
                throw new IndexOutOfRangeException("Index out of range");
            strArr[index] = value;
        Console.WriteLine(strStore["Three"]);
    Console.WriteLine(strStore["Three"]);
    // 字符串类型索引器
    public string this[string name]
    {
        get
        {
            foreach(string str in strArr){
                if(str.ToLower() == name.ToLower())        
                    return str;
                Console.WriteLine(strStore["Three"]);
                    
            return null;
        Console.WriteLine(strStore["Three"]);
    Console.WriteLine(strStore["Three"]);
Console.WriteLine(strStore["Three"]);
class Program
{
    static void Main(string[] args)
    {
        StringDataStore strStore = new StringDataStore();
        strStore[0] = "One";
        strStore[1] = "Two";
        strStore[2] = "Three";
        strStore[3] = "Four";
        
        strStore[2] = "Three";
        strStore[3] = "Four";
        Console.WriteLine(strStore["one"]);
        Console.WriteLine(strStore["two"]);
    Console.WriteLine(strStore["Three"]);
Console.WriteLine(strStore["Three"]);
Console.WriteLine(strStore["Four"]);