.NET索引器

索引器(Indexer):官方说法是一种类成员,它允许类或结构的实例按与数组相同的方式排序,索引器与属性类似,只不过索引器的gei和set访问器方法带有参数,而属性访问器方法不带参数。

 

个人理解: 索引器是C#的一种语法构造,他可以另你用数组的方式来访问类中的集合。索引器是一种特殊的属性,他可以像属性一样通过get和set访问器的方式来指定其行为,不过要额外带参数从集合中取出或者给予赋值行为。

示例:

复制代码

public class StringContainer
{
    
private string[] strings;
    
private int t = 0;

    
public StringContainer(params string[] initialString)
    {
        strings 
= new string[200];
        
foreach(string s in initialString)
        {
            strings[t
++= s;
        }
    }
    
    
public void Add(string str)
    {
        
if(t < strings.Length)
        {
            strings[t
++= str;
        }
    }

    
//开始定义我们的索引器
     public string this[int index]
    {
        
get
        {
            
if(index < t)
            {
                
return strings[index];
            }
        }
        
set
        {
            
if(index < t)
            {
                strings[index] 
= value;
            }
        }
    }

    public int Counts()

    {

          return this.t;

    }



}

复制代码

 

这里我们看到索引器的定义格式,他是通过关键字 this 来定义索引器的,索引器的语法跟属性十分相似,下面我们再看看如何调用定义好的索引器,他的调用跟属性的使用也十分相似,通过get和set并追加参数来获取信息或者赋予执行动作。

复制代码
public   class  Test
{
    StringContainer scon 
=   new  StringContainer();
    scon.Add(
" a " );
    scon.Add(
" b " );
    scon.Add(
" c " );
    scon.Add(
" e " );

    
string  str  =   " abcd " ;
    scon[
1 =  str;  //  这边通过索引器的方式将【第二个属性值】为b修改为abcd

    
for ( int  i = 0 ; i < scon.Counts();i ++ )
    {
        Console.WriteLine(
" {0}:{1} " , i , scon[i]);
    }
    Console.ReadLine();
}
复制代码

 

 

 __________________________________________________________________________________________________

摘一段索引器的妙用: 读取配置文件

 

复制代码
     public   class  SysConfig
    {
        
//  Fields
         private   static  SysRead m_SysRead;

        
//  Methods
         public   static   string  sValue( string  sKey)
        {
            
string  sPath  =  AppDomain.CurrentDomain.BaseDirectory  +   @" Config " ;
            
if  ( ! Directory.Exists(sPath))
            {
                Directory.CreateDirectory(sPath);
            }
            
string  xmlFile  =  sPath  +   @" \Config.Xml " ;
            
if  (File.Exists(xmlFile))
            {
                m_SysRead 
=   new  SysRead(xmlFile);
                
if  (sKey  ==   " Conn " )
                {
                    
return  m_SysRead.sConnection;
                }
                
return  m_SysRead[sKey];
            }
            
// MessageBox.Show("读配置文件失败", "提示", MessageBoxButtons.OK);
             return   "" ;
        }
    }
    
public   class  SysRead
    {
        
//  Fields
         private  XmlDocument m_xmlDoc;
        
private   string  m_xmlFile;
        
private   static  XmlNode m_xmlNode;

        
//  Methods
         public  SysRead( string  sXmlFile)
        {
            
try
            {
                
this .m_xmlFile  =  sXmlFile;
                
this .m_xmlDoc  =   new  XmlDocument();
                
this .m_xmlDoc.Load( this .m_xmlFile);
                m_xmlNode 
=   this .m_xmlDoc.SelectSingleNode( " Config " );
            }
            
catch
            {
                
// MessageBox.Show("配置文件中存在非法字符", "提示", MessageBoxButtons.OK);
            }
        }

        
~ SysRead() //【布颜书】注意这里用~符号来写也是一种方式噢
        {
            m_xmlNode 
=   null ;
            
this .m_xmlDoc  =   null ;
        }

        
private   static   string  getConnValue( string  sKey)
        {
            
try
            {
                
string [] param  =   new   string [ 2 ];
                param 
=  sKey.Split( new   char [] {  ' . '  });
                XmlNodeList nodelist 
=  m_xmlNode.ChildNodes;
                
foreach  (XmlElement xE  in  nodelist)
                {
                    
if  (xE.Name  ==  param[ 0 ])
                    {
                        
return  xE.GetAttribute(param[ 1 ]);
                    }
                }
            }
            
catch
            {
                
return   "" ;
            }
            
return   "" ;
        }

        
//  Properties
         public   string   this [ string  sKey]
        {
            
get
            {
                
return  getConnValue(sKey);
            }
        }

        
public   string  sConnection
        {
            
get
            {
                
return  ( " database= "   +   this [ " connect.DataBase " +   " ; Server= "   +   this [ " connect.ServerIp " +   " ;User ID= "   +   this [ " connect.Uid " +   " ;Password= "   +   this [ " connect.Pw " +   " ;Persist Security Info=True " );
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值