在C#中将索引器作为参数传递

时间:2016-06-14 21:59:27

标签: c# properties parameter-passing ref indexer

当我通过引用传递索引器作为参数时,代码中存在编译时错误。

  1. 为什么不能使用ref或out关键字传递索引器?
  2.   
        
    1. 分配内存对索引器封装的字段的机制是什么(当我们将任何值设置为类Defining_Indexer的索引器元素时)?
    2.   
         using System;
    
        class Defining_Indexer
    
        {
            private string LanguageUser;
            //Declaring indexer
            public string this[int index]
            {
        get
        {
            return LanguageUser;
        }
        set
        {
            LanguageUser = value;
        }
            }
        }
        class Using_Indexer{
    
            //Declaring a method that will use indexer as argument
            public static string BestLanguage(ref string name)
            {
    
    
        //Here I want to show number of users of best language.
            Console.WriteLine("Number of user : ");
            //I want to modify the number of user Since parameter is initialized then best language 
            //users number is decided so there is no any fake.
            string declare = name + "2000";
            Console.WriteLine(declare);
            return declare;
        }//end of BestLanguage Method
        static void Main(string[] args)
        {
            Defining_Indexer result = new Defining_Indexer();
            //Here result elememts store the number of users of a some language.
            result[0] = "2315";//C
            result[1] = "4500";//C++
            result[2] = "44000";//C#
            BestLanguage(ref result[2]);//--Here is error
            Console.Write("Number of User by Main Method :");
            Console.WriteLine(result[2]);
        }
        }
    

    这是编译时错误

      

    属性或索引器不能作为ref或out参数传递。

2 个答案:

答案 0 :(得分:5)

  

为什么不能使用ref或out关键字传递索引器?

因为索引器实际上是方法。它不一定是变量,内存中的地址可以传递“引用”。

执行此操作的方法是使用临时局部变量:

Y

但是我会注意到你的方法没有修改引用,因此根本不需要使它成为result[2] = "44000";//C# string temp = result[2]; BestLanguage(ref temp); result[2] = temp; 参数!

答案 1 :(得分:1)

  1. 索引器和属性是函数的语法糖。
  2. 我不确定我是否完全理解这个问题,但听起来你问的是索引器如何根据索引值将存储的值分成不同的内存。简短回答:事实并非如此。你必须在set和get函数中自己做。
  3. 您的索引器当前的实现方式,无论您使用什么结果[x],都会覆盖LanguageUser