有人能告诉我这个控制台应用程序的功能吗?究竟发生了什么?
此外,还有错误。你能解决它们吗?
public class Program
{
static void Main(string[] args)
{
Name n = new Name[5]; // error
n[0] = new Name(0); //error
n[0] = "hgfhf"; //is this possible in this program?
string nam = n[0];
}
}
public class Name
{
private string[] name;
private int size;
public Name(int size)
{
this.name = new string[size];
this.size = size;
}
public string this[int pos] // what does this mean?
{
get
{
return name[pos];
}
set
{
name[pos] = value;
}
}
}
答案 0 :(得分:2)
这是indexer property。它就像一个普通的属性,但它允许你在其上使用[]
语法:
public class Program
{
static void Main(string[] args)
{
// Create a Name instance by calling it's constructor
// capable of storing 1 string
Name n = new Name(1);
// Store a string in the name
n[0] = "hgfhf";
// Retrieve the stored string
string nam = n[0];
}
}
public class Name
{
private string[] names;
private int size;
public Name(int size)
{
// initialize the names array for the given size
this.names = new string[size];
// store the size in a private field
this.size = size;
}
/// <summary>
/// Indexer property allowing to access the private names array
/// given an index
/// </summary>
/// <param name="pos">The index to access the array</param>
/// <returns>The value stored at the given position</returns>
public string this[int pos]
{
get
{
return names[pos];
}
set
{
names[pos] = value;
}
}
}
答案 1 :(得分:0)
Name n = new Name[5]; //this is declaration error
- &GT;您需要声明一个类名称数组。
声明为:
Name[] n = new Name[5];
public string this[int pos] {}
这意味着您已经定义了一个索引器属性,并且索引器允许将class
或struct
的实例编入索引,就像数组一样。
现在你要分配一个字符串值(string nam = n[0]
),这个值在定义属性时都是正确的。
答案 2 :(得分:0)
Name n = new Name[5];//error
变量n
是对Name
的单个实例的引用,因此您无法在其中放置数组。使用Name[]
作为变量的类型。
n[0] = new Name(0);//error
当您将变量设为数组时,此错误将消失。
n[0] = "hgfhf";//is this possible in this program??
不,那会尝试用字符串替换Name
实例。如果要将字符串放在Name
实例中,则使用双索引,一个索引访问数组中的项,一个索引访问Name
实例中的索引器属性:
n[0][0] = "asdf";
(但是,正如您为Name
实例指定的大小为零,这会导致IndexOutOfRangeException
。)
public string this[int pos]//wt this means????
这是索引器属性。它是一个带参数的属性,它通常用于访问项目,就像对象是一个数组一样。