C# 属性、索引

属性(property):

public string Name
{
    get
    {
        return _name;
    }
    set
    {
        _name = value;
    }
}    

简写为:

public string Name { set; get;}

索引器(index):

索引器为C#程序语言中泪的一种成员,它是的对象可以像数组一样被索引,使程序看起来更直观,更容易编写。

索引器和数组比较:

(1)索引器的索引值(Index)类型不受限制

(2)索引器允许重载

(3)索引器不是一个变量

索引器和属性的不同点

(1)属性以名称来标识,索引器以函数形式标识

(2)索引器可以被重载,属性不可以

(3)索引器不能声明为static,属性可以

要声明类或结构上的索引器,请使用this关键字,例如:

public int this[int index] //声明索引器

{

// get and set 访问

}

索引器的修饰符有:new、public、protected、internal、private、virtual、sealed、override、abstract和extern。

当索引器声明包含extern修饰符时,称该索引器为外部索引器。因为外部索引器声明不提供任何实际的实现,所以它的每个访问器声明都由一个分号组成。

索引器的签名由其形参的数量和类型组成。它不包括索引器类型或形参名。如果在同一类中声明一个以上的索引器,则它们必须具有不同的签名。

索引器值不归类为变量;因此,不能将索引器值作为ref或out参数来传递。

索引必须是实例成员。

索引器使用示例:

using System;
class IndexerRecord
{
    private string [] data = new string [6];
    private string [] keys  = {
        "Author", "Publisher", "Title",
        "Subject", "ISBN", "Comments"
        }; 

    //注:程序中用了两种方法来索引:
    //一是整数作下标,二是字符串(关键词名)作下标
    public string this[ int idx ]
    {
        set
        {
            if( idx >= 0 && idx < data.Length )
                data[ idx ] = value;
        }
        get
        {
            if( idx >= 0 && idx < data.Length )
                return data[ idx ];
            return null;
        }
    }
    public string this[ string key ]
    {
        set
        {
            int idx = FindKey( key );
            this[ idx ] = value;
        }
        get
        {
            return this[ FindKey(key) ];
        }
    }
    private int FindKey( string key )
    {
        for( int i=0; i<keys.Length; i++)
            if( keys[i] == key ) return i;
        return -1;
    }
    static void Main()
    {
        IndexerRecord record = new IndexerRecord();
        record[ 0 ] = "马克-吐温";
        record[ 1 ] = "Crox出版公司";
        record[ 2 ] = "汤姆-索亚历险记";
        Console.WriteLine( record[ "Title" ] );
        Console.WriteLine( record[ "Author" ] );
        Console.WriteLine( record[ "Publisher" ] );

        Console.ReadKey(true);
    }
}
时间: 2024-10-12 20:19:39

C# 属性、索引的相关文章

js循环给li绑定事件实现 点击li弹出其索引值 和内容

代码如下: html代码 <ul> <li>房产</li> <li>家居</li> <li>二手房</li> </ul> 方法一: var itemli = document.getElementsByTagName("li"); for(var i = 0; i<itemli.length; i++){ itemli[i].index = i; //给每个li定义一个属性索引值,赋

C#入门--索引器

C#入门--索引器 索引器允许类或结构的实例按照与数组相同的方式进行索引.索引器类似于属性,不同之处在于它们的访问器采用参数. 索引器概述 索引器使得对象可按照与数组相似的方法进行索引. get 访问器返回值.set 访问器分配值. this 关键字用于定义索引器. value 关键字用于定义由 set 索引器分配的值. 索引器不必根据整数值进行索引,由您决定如何定义特定的查找机制. 索引器可被重载. 索引器可以有多个形参,例如当访问二维数组时. class SampleCollection<T

SEAndroid安全机制对Android属性访问的保护分析

Android系统通过属性暴露设备和运行时信息,并且可以通过设置属性来控制系统行为.因此,属性也像文件一样,是一种需要保护的资源.在启用SEAndroid之前,敏感属性只能被预先设定的进程进行设置.启用SEAndroid之后,敏感属性会进一步被SEAndroid安全策略保护.这样就可以更有效地保护系统属性了.在本文中,我们就详细分析SEAndroid安全机制对Android属性设置保护提供的支持. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 在分析SE

C#---属性和字段

C#中的变量 内存:用户存储正在运行的程序数据RAM(随机存储器)断电后里面的数据丢失 变量代表这一块内存空间,我们可以通过变量名称向内存存/取数据.有变量就不需要我们记忆复杂的内存地址了. 先向计算机申请一块内存空间,考虑往内存方的数据类型,向内存申请一块内存空间的语法: int number;//申请开辟一块内存空间 number=1000;//把1000放到number中 Console.WriteLine(number); Console.ReadKey(); 变量可以类中,方法中声明.

第十章 属性

1. 概述 本章讨论类型中的各种属性. 2. 名词解释 ① 属性:属性允许源代码用一个简化的语法来调用一个方法. ② 访问器方法:封装了字段访问的方法通常称为 访问器方法. ③ 自动实现属性(Automatically Implemented Property, AIP): C#提供的一种更简单的语法,用于 只是为了封装一个支持字段而创建一个属性的情况. ④ 内联(inline): 内联是将一个方法的代码直接编译到调用它的方法中. 3. 主要内容 3.1 无参属性 定义了get/set访问器以后

索引器 C#

概述 索引器允许类或结构的实例就像数组一样进行索引. 索引器类似于属性,不同之处在于它们的访问器采用参数. 在下面的示例中,定义了一个泛型类,并为其提供了简单的 get 和 set 访问器方法(作为分配和检索值的方法). Program 类为存储字符串创建了此类的一个实例. Code 1 class SampleCollection<T> 2 { 3 // Declare an array to store the data elements. 4 private T[] arr = new

hibernate映射集合属性

注意:持久化集合字段必须声明为接口,两个持久化对象不能共享同一个集合元素的引用. 映射集合属性 @ElementCollection{ fetch targetClass } 映射集合属性表 @CollectionTable{ name catalog schema indexes joinColumns uniqueConstraints } @JoinColumn{ columnDefinition name insertable updatable nullable table uniqu

PostgreSQL索引描述

索引方式:唯一索引,主键索引,多属性索引,部分索引,表达式索引. 索引类型:B-Tree,Hash,GiST,GIN以及表达式索引 PostgreSQL所有索引都是“从属索引”,也就是说,索引在物理上与它描述的表文件分离. 索引也是对象,在表pg_class里有记录. 索引的内部结构与索引的访问方法(索引类型)相关.所有访问方法都通过页面来组织索引的内部结构,这样可以使用存储管理器提供的接口来访问索引. 索引方式 多属性索引:如果一个索引定义多一个一个属性,就称为多属性索引,用于组合查询. Po

C#反射---属性

C#反射详解 (1)反射获取属性 先讲解一下获取的反射属性的一些枚举参数的含义:BindingFlags Instance|Public:获取公共的的实例属性(非静态的) Instance|NonPublic:获取非公共的的实例属性(非静态的).(private/protect/internal) Static|Public:获取公共的静态属性 Static|NonPublic:获取非公共的静态属性.(private/protect/internal) Instance|Static|Publi

pandas中Series对象和DataFrame对象的索引

1.Series obj = pd.Series(range(5),index=['a','a','b','b','c']) #pandas支持重复索引 可以直接用Series['索引名']:obj['a'] 也可以使用obj.a loc和iloc同样适用 2.DataFrame frame = pd.DataFrame(np.arange(12).reshape(3,4),index=['one','two','three'],columns=['a','b','c','d') 使用DataF