當前位置:首頁 » 編程軟體 » 索引編譯

索引編譯

發布時間: 2022-05-05 07:01:32

⑴ c#索引器的用法,初學索引器,原理都不懂..

class SampleCollection<T>
{
private T[] arr = new T[100];
public T this[int i]
{
get
{
return arr[i];
}
set
{
arr[i] = value;
}
}
}

// This class shows how client code uses the indexer
class Program
{
static void Main(string[] args)
{
SampleCollection<string> stringCollection = new SampleCollection<string>();
stringCollection[0] = "Hello, World";
System.Console.WriteLine(stringCollection[0]);
}
}

索引器使得對象可按照與數組相似的方法進行索引。

get 訪問器返回值。set 訪問器分配值。

this 關鍵字用於定義索引器。

value 關鍵字用於定義由 set 索引器分配的值。

索引器不必根據整數值進行索引,由您決定如何定義特定的查找機制。

索引器可被重載。

索引器可以有多個形參,例如當訪問二維數組時。

補充問題的回答:
c#中編譯器會定義一個把所有的數據成員初始化成0(假、null)等的構造函數,這個默認構造函數確保了結構體在生成時被初始化。
而如果允許你自己定義默認構造函數,那麼就存在著一種可能:你漏掉了某個成員沒有初始化。這樣一來會導致這個成員的值在被構造後處於未知的狀態,這是C#所不允許的。

⑵ 誰知道C#中什麼是索引器,索引器的實現過程,是否只能根據數字進行索引

C#語言一個最令人感興趣的地方就是類的索引器(indexer)。簡單說來,所謂索引器就是一類特殊的屬性,通過它們你就可以像引用數組一樣引用自己的類。顯然,這一功能在創建集合類的場合特別有用,而在其他某些情況下,比如處理大型文件或者抽象某些有限資源等,能讓類具有類似數組的行為當然也是非常有用的。本文就會引領你設置類來採用索引器。但是,首先讓我們概述下屬性這個概念以便了解些必要的背景知識。
屬性
假如你曾經用VB6編寫過程序,那麼你應該很熟悉屬性方法才對,所謂屬性方法其實就是特殊的類成員,它實現了對私有類域的受控訪問。在C#語言中有兩種屬性方法,其一是get,通過它可以返回私有域的值,其二是set,通過它就可以設置私有域的值。比如說,以下面的代碼為例,其間創建了一個FirstName 屬性,由它控制對私有類成員firstname的訪問:class Person {
private string firstname;
public string FirstName {
get {return firstname;}
set {firstname = value;}
}
}
屬性聲明可以如下編碼:
Person p = new Person();
p.FirstName = "Lamont";
Console.WriteLine (p.FirstName);
如你你所看到的那樣,屬性聲明倒更像是域聲明,只不過它還聲明了兩個特殊的成員,按照微軟的說法就是所謂的訪問函數(accessor)。當某一表達式的右邊調用屬性或者屬性用作其他子程序(或者函數)的參數時即會調用get訪問函數。反之,當表達式左邊調用屬性並且通過隱式傳遞value參數設置私有域值的情況下就會調用set訪問函數。你可以創建只讀屬性,方法是省略set訪問函數,這樣任何設置屬性的嘗試都會產生編譯錯誤。
採用索引器的益處 下面是它的結構 <modifier> <return type> this [argument list]
...{
get
...{
// Get codes goes here
}
set
...{
// Set codes goes here
}
}
註: modifier:修飾詞,如private, public, protected or internal this:在C#中this是一個特殊的關鍵字,它表示引用類的當前實例。在這里它的意思是當前類的索引。 argument list:這里指索引器的參數。 說了半天咱們轉到正題上來,那麼為什麼我要兜這個圈子呢?其實,這是因為類的索引器非常像屬性,從代碼上看也是這樣。以下是具有索引器的類示例,通過索引器會返回一個字元串:class Sample {
public string this [int index] {
get {return "You passed " + index; }
}
}
注意,這里的屬性名是this,意思是回引類的當前實例,參數列表包含在方括弧而非括弧之內。還有,這是一個只讀索引器。為了把它改成讀/寫類型,我又添加了一個set訪問函數。在定義索引器的時候,你不一定只採用一個參數。索引器參數可以採用任何類型,不過int是通常採用也是最為合理的類型。同一類中還可能擁有一個以上的索引器(重載)。
如上定義了Sample類之後,我們就可以把索引器用作某種默認的屬性,如下所示:Sample s = new Sample();
Console.WriteLine(s[55]);
屬性和索引器
屬性和索引器之間有好些差別:
類的每一個屬性都必須擁有唯一的名稱,而類里定義的每一個索引器都必須擁有唯一的簽名(signature)或者參數列表(這樣就可以實現索引器重載)。
屬性可以是static(靜態的)而索引器則必須是實例成員。
為索引器定義的訪問函數可以訪問傳遞給索引器的參數,而屬性訪問函數則沒有參數。
介面
類似數組的行為常受到程序實現者的喜愛,所以你還可以為介面定義索引器,IList和 IDictionary集合介面都聲明了索引器以便訪問其存儲的項目。
在為介面聲明索引器的時候,記住聲明只是表示索引器的存在。你只需要提供恰當的訪問函數即可,不必包括范圍修飾符。以下代碼把索引器聲明為介面IImplementMe的一部分:interface IImplementMe {
string this[int index]
{
get;
set;
}
相應實現的類則必須為IimplementMe的索引器具體定義get和set訪問函數。
以上就是有關索引器的一些基本概述了。現在你應該對索引器在你的開發中所具有的作用有了較深入的了解。class SampleCollection<T>
{
private T[] arr = new T[100];
public T this[int i]
{
get
{
return arr[i];
}
set
{
arr[i] = value;
}
}
}// This class shows how client code uses the indexer
class Program
{
static void Main(string[] args)
{
SampleCollection<string> stringCollection = new SampleCollection<string>();
stringCollection[0] = "Hello, World";
System.Console.WriteLine(stringCollection[0]);
}
}

⑶ 電視機左上角出現索引編譯時間等怎麼消除

這個是進入了系統匯流排,可能是存儲器數據錯亂或是遙控器亂按巧合按到了。退出匯流排系統,要電視機型號。

⑷ c# 初次學索引器求解問題 關於索引器和return和get。

很簡單,就是有個路徑沒返回值
else if(index > 2 && index < 0)
{
throw new Exception("超出范圍:");
}
這句後面,加上 throw new Exception("超出范圍:");即可。
而且這句index > 2 && index < 0也不可能成立,應該改成
index > 2 || index < 0

⑸ C#中,索引器的作用和用法

實例+索引的方法來訪問類成員。
using System;
class MyTest
{
public static int Main()
{
SchoolMate myMate=new SchoolMate();
Console.WriteLine(myMate.linkman[0]); //直接訪問成員

//以索引器的形式訪問成員
Console.WriteLine("name:{0}",myMate[0]);

Console.WriteLine("Enter your name:");
myMate[0]=Console.ReadLine();
Console.WriteLine("name:{0}",myMate[0]);
Console.WriteLine("sex:{0}",myMate[1]);
Console.WriteLine("age:{0}",myMate[2]);
return 0;
}
}
class SchoolMate
{
public string[] linkman;

public SchoolMate()
{
linkman=new string[]{"yesline","male","23"};
}

public string this[int index]
//string指返回值,this指類,或此類創建的實例。
{
get
{
return linkman[index];
}
set
{
linkman[index]=value;
}
}

}
在此成員中,訪問linkman數組當然可以用另外的方法,如訪問第一個成員:myMate.linkman[0]。
既然可以這樣,為什麼要用索引器呢?書上說當類是容器時用索引器有用,可我還沒看到此類例子。
可以重載索引器。如再定義一個索引器:
public int othertest=23;
//定義
public int this[string index] //index的類型不能在為int,因為已定義過
{
get{return othertest;}
set{othertest=value;}
}
//使用,查看結果:
Console.WriteLine(myMate["1"]);
//myMate[""]中所以可以為任意string
//輸出:23

⑹ c#中索引是怎麼回事(盡量具體點)

索引器非常類似於屬性,但索引器可以有參數列表,且只能作用在實例對象上,不能在類上直接作用
下面是一個索引器的具體的應用例子,它對我們理解索引器的設計和應用很有幫助。

using System;
class BitArray
{
int[] bits;
int length;
public BitArray(int length)
{
if (length < 0)
throw new ArgumentException();
bits = new int[((length - 1) > > 5) + 1];
this.length = length;
}
public int Length
{
get { return length; }
}
public bool this[int index]
{
get
{
if (index < 0 || index > = length)
throw new IndexOutOfRangeException();
else
return (bits[index > > 5] & 1 < < index) != 0;
}
set
{
if (index < 0 || index > = length)
throw new IndexOutOfRangeException();
else if(value)
bits[index > > 5] |= 1 < < index;
else
bits[index > > 5] &= ~(1 < < index);
}
}
}
class Test
{
static void Main()
{
BitArray Bits=new BitArray(10);
for(int i=0;i <10;i++)
Bits[i]=(i%2)==0;

Console.Write(Bits[i]+ " ");
}
}

編譯並運行程序可以得到下面的輸出:

True False True False True False True False True False

上面的程序通過索引器的使用為用戶提供了一個界面友好的bool數組,同時又大大降低了程序的存儲空間代價。索引器通常用於對象容器中為其內的對象提供友好的存取界面--這也是為什麼C#將方法包裝成索引器的原因所在。實際上,我們可以看到索引器在.NET Framework類庫中有大量的應用。

出處:CSDN論壇

⑺ html help workshop編譯時索引文件出錯

有一個標簽叫「Contents」就是製作索引用的,單擊「添加關鍵字」(像鑰匙一樣的按鈕),來添加一個關鍵字,在「URL」之中為此關鍵字指定 HTML 頁面信息,然後可以單擊箭頭按鈕來調整索引的優先順序。

說得不太明白,沒辦法,不允許傳圖。

⑻ mysql有幾種索引類型使用索引時都有那些地方要注意

MySQL索引類型包括:
一、普通索引
這是最基本的索引,它沒有任何限制。有以下幾種創建方式:
1.創建索引
代碼如下:

CREATE INDEX indexName ON mytable(username(length));
如果是CHAR,VARCHAR類型,length可以小於欄位實際長度;如果是BLOB和TEXT類型,必須指定 length,下同。

2.修改表結構

代碼如下:
ALTER mytable ADD INDEX [indexName] ON (username(length)) -- 創建表的時候直接指定。
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );

-- 刪除索引的語法:
DROP INDEX [indexName] ON mytable;

二、唯一索引
它與前面的普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:

代碼如下:
CREATE UNIQUE INDEX indexName ON mytable(username(length))
-- 修改表結構
ALTER mytable ADD UNIQUE [indexName] ON (username(length))
-- 創建表的時候直接指定
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, UNIQUE [indexName] (username(length)) );

三、主鍵索引
它是一種特殊的唯一索引,不允許有空值。一般是在建表的時候同時創建主鍵索引:

代碼如下:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, PRIMARY KEY(ID) );

當然也可以用 ALTER 命令。記住:一個表只能有一個主鍵。
四、組合索引
為了形象地對比單列索引和組合索引,為表添加多個欄位:

代碼如下:
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, city VARCHAR(50) NOT NULL, age INT NOT NULL );

為了進一步榨取MySQL的效率,就要考慮建立組合索引。
二:使用索引的注意事項
使用索引時,有以下一些技巧和注意事項:
1.索引不會包含有NULL值的列
只要列中包含有NULL值都將不會被包含在索引中,復合索引中只要有一列含有NULL值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓欄位的默認值為NULL。
2.使用短索引
對串列進行索引,如果可能應該指定一個前綴長度。例如,如果有一個CHAR(255)的列,如果在前10個或20個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和I/O操作。
3.索引列排序
MySQL查詢只使用一個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫默認排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列創建復合索引。
4.like語句操作
一般情況下不鼓勵使用like操作,如果非使用不可,如何使用也是一個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。
5.不要在列上進行運算

select * from users where YEAR(adddate)<2007;
將在每個行上進行運算,這將導致索引失效而進行全表掃描,因此我們可以改成:

select * from users where adddate<『2007-01-01';

6.不使用NOT IN和<>操作。

三:sql優化原則
常見的簡化規則如下:
1.不要有超過5個以上的表連接(JOIN)
2.考慮使用臨時表或表變數存放中間結果。
3.少用子查詢
4.視圖嵌套不要過深,一般視圖嵌套不要超過2個為宜。
5.連接的表越多,其編譯的時間和連接的開銷也越大,性能越不好控制。
6.最好是把連接拆開成較小的幾個部分逐個順序執行。
7.優先執行那些能夠大量減少結果的連接。
8.拆分的好處不僅僅是減少SQL Server優化的時間,更使得SQL語句能夠以你可以預測的方式和順序執行。

如果一定需要連接很多表才能得到數據,那麼很可能意味著設計上的缺陷。

⑼ 易語言的多項選擇命令的索引參數,為何換成變數就一直無法編譯成功直接用1,2,3等等就可以了

1、「選擇」和「多項選擇」命令的各備選參數數據類型必須相同或可以互相轉換。
2、之所以直接用數字能成功,是因為易語言直接根據這個數字選擇了結果,在編譯後的程序中不會再執行多項選擇。

解決方法:所有參數都使用文本型。

⑽ 什麼是索引表達式索引標識

索引表達式:按順序由一個表達式、一個左括弧、一個索引參數列表和一個右括弧組成。表達式必須產生類型為數組的值、類型具有一組重載默認屬性的值或一組重載屬性。如果表達式的結果是重載屬性或具有 Default 屬性的值,則重載決策規則用於確定某個屬性是否適用於索引參數列表。如果無任何屬性適用,則發生編譯時錯誤。否則將在帶有索引參數的 getter 上執行函數成員調用,調用結果成為索引表達式的值。如果屬性是只寫的,則發生編譯時錯誤。如果表達式的結果為數組類型的值,則參數列表中的參數數目必須同數組類型的秩相同,而且不能包含任何命名參數。每個表達式都必須可以隱式轉換為 Integer 類型。索引表達式的值是指定索引處的變數。在運行時,參數列表先於表達式計算。如果運行時有任何索引無效,則引發 System.IndexOutOfRangeException 異常。IndexExpression ::= Expression ( ArgumentList )(索引表達式 ::= 表達式 ( 參數列表 ))索引標識:就是作為特殊標記。希望對你有幫助!

熱點內容
蘋果像素低為什麼比安卓好 發布:2025-05-14 19:13:23 瀏覽:459
安卓機微信怎麼設置紅包提醒 發布:2025-05-14 19:00:15 瀏覽:271
androidsystem許可權設置 發布:2025-05-14 18:56:02 瀏覽:970
mq腳本 發布:2025-05-14 18:45:37 瀏覽:25
仙境傳說ro解壓失敗 發布:2025-05-14 18:45:01 瀏覽:868
betweenand的用法sql 發布:2025-05-14 18:39:25 瀏覽:250
tplink攝像頭存儲卡格式化 發布:2025-05-14 18:37:08 瀏覽:347
安卓平板怎麼安裝excel的軟體 發布:2025-05-14 18:35:44 瀏覽:42
廣州數控圓弧編程實例 發布:2025-05-14 18:25:00 瀏覽:401
搭建伺服器能使用nodejs開發嗎 發布:2025-05-14 18:24:14 瀏覽:136