概述
属性是一种成员,它提供灵活的机制来读取、写入或计算私有字段的值。 属性可用作公共数据成员,但它们实际上是称为“访问器”的特殊方法。 这使得可以轻松访问数据,还有助于提高方法的安全性和灵活性。
public class Person
{
private string _name = "No one";
public Person(string name)
{
_name = name;
}
public string Name
{
get { return _name;}
}
};
Person p = new Person ("Arya");
System.Console.WriteLine (p.Name);
public string Name
{
get { return _name;}
set { _name = value;}
}
value是set访问器的隐式参数,此参数的类型是属性的类型(string)。p.Name = "Erya";
索引器允许类或结构的实例就像数组一样进行索引。 索引器类似于属性,不同之处在于它们的取值函数采用参数。
public string this[string key]
{
get { if (key == "Name")
return _name;
return null;}
set { if (key == "Name")
_name = value;
return;}
}
p ["Name"] = "Anonymous";
System.Console.WriteLine (p ["Name"]);
属性和索引器的区别:
属性 | 索引器 |
---|---|
允许像调用公共数据成员一样调用方法。 | 允许对一个对象本身使用数组表示法来访问该对象内部集合中的元素。 |
可通过简单的名称进行访问。 | 可通过索引器进行访问。 |
可以为静态成员或实例成员。 | 必须为实例成员。 |
属性的 get 访问器没有参数。 | 索引器的 get 访问器具有与索引器相同的形参表。 |
属性的 set 访问器包含隐式 value 参数。 | 除了value参数外,索引器的 set 访问器还具有与索引器相同的形参表。 |
支持对自动实现的属性使用短语法。 | 不支持短语法。 |
public int Age { get;set;}
而这种写法妙用就在于可以写成这样:
public int Age { get;private set;}
即对外只读,对内可写。
protected int RealAge{ private get; set;}
public class Coder : Person
{
public new int Age {get{ return 16;}}
public new string this[string key]
{
get {if (key == "Name")
return "I don't know.";
return null;}
}
}
这里我们使用new关键字声明了一个同名的属性Age和同名的索引器。当我们调用这个属性和索引器时:
Coder c = new Coder();
System.Console.WriteLine (c.Age);
System.Console.WriteLine (c["Name"]);
会显示10和I don't know.
System.Console.WriteLine (((Person)c).Age);
System.Console.WriteLine (((Person)c)["Name"]);
显示0和No one。
public virtual bool Male {
get;
set;
}
public virtual bool this[bool noSense]
{
get { return noSense;}
}
在Coder里面添加
public override bool Male
{
get { return true;}
set { }
}
public override bool this[bool noSense]
{
get { return !noSense;}
}
static public string Planet
{
get { return "The Earth";}
}
(如果哪天我们人类开启星际殖民,就要修改get并添加set了。)
public int this[int a, int b]
{
get { return a + b;}
}
索引器可以有多个参数(属性连一个参数都没有……),参数类型也不受限于int和string。
最后补一发访问修饰符:
public
同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。
private
只有同一类或结构中的代码可以访问该类型或成员。
protected
只有同一类或结构或者此类的派生类中的代码才可以访问的类型或成员。
internal同一程序集中的任何代码都可以访问该类型或成员,但其他程序集中的代码不可以。
protected internal
由其声明的程序集或另一个程序集派生的类中任何代码都可访问的类型或成员。 从另一个程序集进行访问必须在类声明中发生,该类声明派生自其中声明受保护的内部元素的类,并且必须通过派生的类类型的实例发生。
最后
以上就是机智小猫咪为你收集整理的C#语法小知识(六)属性与索引器属性是一种成员,它提供灵活的机制来读取、写入或计算私有字段的值。 属性可用作公共数据成员,但它们实际上是称为“访问器”的特殊方法。 这使得可以轻松访问数据,还有助于提高方法的安全性和灵活性。索引器允许类或结构的实例就像数组一样进行索引。 索引器类似于属性,不同之处在于它们的取值函数采用参数。属性和索引器的区别:最后补一发访问修饰符:public同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。private只有同一类或结构中的代码可以访问的全部内容,希望文章能够帮你解决C#语法小知识(六)属性与索引器属性是一种成员,它提供灵活的机制来读取、写入或计算私有字段的值。 属性可用作公共数据成员,但它们实际上是称为“访问器”的特殊方法。 这使得可以轻松访问数据,还有助于提高方法的安全性和灵活性。索引器允许类或结构的实例就像数组一样进行索引。 索引器类似于属性,不同之处在于它们的取值函数采用参数。属性和索引器的区别:最后补一发访问修饰符:public同一程序集中的任何其他代码或引用该程序集的其他程序集都可以访问该类型或成员。private只有同一类或结构中的代码可以访问所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复