C#索引器、接口、泛型

以下是對提供的 C# 代碼中涉及的核心知識點的梳理和總結,涵蓋索引器、接口、泛型三大核心內容,以及相關實踐要點:

一、索引器(Indexer)

索引器是一種允許類或結構體像數組一樣通過[]語法訪問成員的特殊成員,本質是對類中數據的 “索引式訪問” 封裝。

1. 基本定義與格式
  • 作用:讓對象可以通過對象名[索引]的方式訪問內部數據(如數組、集合中的元素),簡化訪問邏輯。

  • 格式:

    public 返回值類型 this[索引類型 索引參數名]
    {get { /* 獲取數據時執行,返回對應值 */ }set { /* 設置數據時執行,value為賦值內容 */ }
    }
  • 關鍵說明:

    • this關鍵字表示當前對象,索引參數可以是任意類型(int、string 等)。

    • get塊:通過索引獲取數據時觸發,返回內部存儲的數據。

    • set塊:通過索引設置數據時觸發,value是賦值運算符右側的值(若省略set,則索引器為只讀)。

2. 核心特點
  • 支持多類型索引:同一個類可以定義多個索引器(重載),通過索引參數類型區分。 例如:ClassRoom類同時定義this[int index](按位置索引)和this[string name](按姓名索引)。

  • 動態處理邏輯:可在get/set中添加自定義邏輯(如邊界檢查、數據轉換)。 例如:索引器練習中,當索引超出數組長度時,動態擴展數組長度。

  • 與數組的區別:數組的索引固定為int類型且基于連續內存,索引器的索引類型和內部實現可自定義(如基于字典、集合)。

3. 示例解析
  • ClassRoom類中,通過this[int index]索引器訪問List<Students>集合中的元素,get返回對應索引的學生對象,set修改對應位置的學生對象。

  • 通過this[string name]索引器,根據姓名查找學生(使用List.Find方法),實現按姓名索引的功能。

一、索引器的本質與作用

索引器是 C# 中一種特殊的類成員,允許類或結構的實例像數組一樣通過索引([] 進行訪問,從而簡化對內部數據的操作。其核心作用是:將類的內部數據結構(如數組、集合)封裝起來,對外提供類似數組的訪問接口,同時隱藏內部實現細節。

二、索引器的基本語法
// 訪問修飾符  返回值類型  this[參數類型 參數名]
public 數據類型 this[索引類型 index]
{get { /* 獲取值的邏輯,返回對應數據 */ }set { /* 設置值的邏輯,value表示賦值的內容 */ }
}
  • this:特殊關鍵字,代表當前類的實例(類似屬性,但索引器沒有名稱,通過this標識)。

  • 索引類型:可以是任意類型(int、string、自定義類型等),這是索引器與數組的關鍵區別(數組索引只能是 int)。

  • get訪問器:通過索引獲取值時執行(類似數組的讀操作)。

  • set訪問器:通過索引設置值時執行(類似數組的寫操作),value是隱式參數,代表賦值的內容。

  • 若省略set,則索引器為只讀;若省略get,則為只寫(通常不推薦)。

三、索引器的重載特性

索引器支持重載(與方法重載規則一致),即同一類中可以定義多個索引器,通過參數類型或參數數量區分。

示例(第一個代碼)ClassRoom類定義了兩個索引器:

// 1. int類型索引:通過下標訪問學生
public Students this[int index] { get; set; }
?
// 2. string類型索引:通過姓名查找學生
public Students this[string n] { get; }

調用時會根據[]中參數的類型自動匹配對應的索引器:

room[1]; // 匹配int類型索引器
room["鄭爽"]; // 匹配string類型索引器
四、索引器與數組的區別
特性索引器數組
本質類的成員(方法的語法糖)引用類型(數據結構)
索引類型任意類型(int、string 等)只能是 int 類型
長度靈活性可動態調整(內部邏輯控制)長度固定(創建后不可變)
定義位置類或結構內部獨立定義(變量)
五、代碼細節分析與擴展
1. 第一個代碼(ClassRoom 類)
  • 內部數據結構:使用List<Students>存儲學生,索引器封裝了對 List 的訪問,避免直接暴露 List(封裝性)。

  • string 類型索引器

    :通過姓名查找學生,使用

    List.Find()

    方法結合 Lambda 表達式簡化邏輯:

    return students.Find(s => s.Name == n); 
    // 等價于循環遍歷查找,更簡潔
  • set 訪問器的作用:

    this[int index]

    的 set 訪問器允許直接通過索引修改 List 中的元素,例如:

    room[0] = new Students() { Name = "金秀賢", Sex='女' }; 
    // 實際執行students[0] = value;
2. 第二個代碼(Student 類)
  • 核心功能:索引器處理數組索引越界問題,實現動態擴展數組長度。

  • 關鍵邏輯(set 訪問器):

    set 
    {if (index >= names.Length){// 索引越界時,創建新數組并復制原有元素string[] newNames = new string[names.Length + 1];Array.Copy(names, newNames, names.Length); // 復制舊數據newNames[index] = value; // 賦值新元素names = newNames; // 替換舊數組}else{names[index] = value; // 索引正常時直接賦值}
    }

    這個邏輯解決了數組長度固定的問題,通過索引器對外提供 “動態數組” 的體驗。

六、索引器的擴展用法
  1. 多參數索引器:支持多個參數(類似二維數組),例如:

    // 二維索引器:訪問矩陣中的元素
    public int this[int row, int col]
    {get { return matrix[row, col]; }set { matrix[row, col] = value; }
    }
    // 調用:matrix[2, 3] = 10;
  2. 限制訪問權限:通過訪問修飾符控制 get/set 的可見性,例如:

    public string this[int index]
    {get { return data[index]; } // 公開可讀private set { data[index] = value; } // 僅類內部可寫
    }
  3. 結合接口:索引器可以在接口中定義(僅聲明,無實現),由實現類具體實現:

    public interface IIndexable
    {string this[int index] { get; set; }
    }
總結

索引器是 C# 中增強類交互性的重要特性,通過模擬數組的訪問方式,簡化了對類內部數據的操作。其核心優勢在于:靈活的索引類型、支持重載、可封裝復雜內部邏輯,常用于集合類、數據容器等場景(如List<T>Dictionary<TKey, TValue>內部都實現了索引器)。

二、接口(Interface)

接口是一種規范(“契約”),定義了一組必須實現的成員(屬性、方法等),但不包含實現邏輯,由類或結構體實現。

1. 基本定義與格式
  • 作用:統一不同類的行為標準,實現 “多態” 和 “解耦”。

  • 格式:

    interface 接口名(通常以I開頭)
    {// 成員聲明(無訪問修飾符,默認公開)返回值類型 方法名(參數);類型 屬性名 { get; set; }
    }
  • 實現規則:類 / 結構體通過:實現接口,必須實現接口中所有成員(包括繼承的父接口成員)。

2. 核心特點
  • 多實現:一個類可以實現多個接口(用,分隔),解決類的單繼承限制。 例如:Book類同時實現IBookIPaper接口。

  • 接口繼承:接口可以繼承其他接口,子接口包含父接口的所有成員。實現子接口的類必須實現所有父接口和子接口的成員。 例如:IStudent繼承IPeopleStudent類實現IStudent時,需實現IPeopleNameAgeIStudentStudentIdStudy

  • 顯式實現:當多個接口包含同名不同類型的成員時,需顯式實現(不添加訪問修飾符,通過 “接口名。成員” 定義)。 例如:IAIBC屬性(int 和 string 類型),通過int IA.Cstring IB.C實現,訪問時需將對象轉為對應接口類型。

3. 與抽象類的區別
對比項接口抽象類
實現方式類通過:實現,可多實現類通過:繼承,僅單繼承
成員實現無實現(純規范)可包含抽象成員(無實現)和具體成員
訪問修飾符成員無修飾符(默認公開)成員可加修飾符(public、protected 等)
成員類型僅屬性、方法、事件、索引器可包含字段、屬性、方法等
實例化不能實例化不能實例化
一、接口的本質與核心特性

接口是 C# 中一種引用類型,它定義了一組未實現的成員規范(屬性、方法、索引器、事件等),本質是一種 “契約” 或 “規則”。其核心特性包括:

  • 無實現:接口只聲明成員 “是什么”,不定義 “怎么做”(方法無方法體,屬性只有get/set聲明)。

  • 強制實現:類或結構體實現接口時,必須全部實現接口中的所有成員,否則會編譯錯誤。

  • 多實現支持:一個類 / 結構體可以同時實現多個接口(彌補 C# 類單繼承的限制)。

二、接口的定義語法
// 接口名稱通常以"I"開頭(約定),成員默認是public(不能顯式添加訪問修飾符)
interface 接口名
{// 屬性聲明(無實現)返回值類型 屬性名 { get; set; }// 方法聲明(無方法體)返回值類型 方法名(參數列表);// 索引器、事件等(語法類似類成員,但無實現)
}

示例(用戶代碼)

interface IBook
{string Name { get; set; } ?// 屬性聲明double Price { get; set; }void Fn(); ?// 方法聲明void Fn(string n); ?// 方法重載聲明
}
三、接口的實現

類或結構體通過:符號實現接口,需嚴格遵循接口規范:

1. 基本實現規則
  • 必須實現接口中所有成員(包括重載的方法、屬性等)。

  • 實現的成員必須與接口聲明的返回值、參數列表、名稱完全一致。

  • 類可以在實現接口的基礎上,添加自己的額外成員(如Book類的Color屬性)。

示例

class Book : IBook, IPaper ?// 實現多個接口
{// 實現IBook的屬性public string Name { get; set; }public double Price { get; set; }// 實現IPaper的屬性public string Type { get; set; }// 類自己的額外成員public string Color { get; set; }// 實現IBook的方法public void Fn() { /* 具體實現 */ }public void Fn(string n) { /* 具體實現 */ }
}
2. 顯式實現(解決成員沖突)

當類實現的多個接口包含同名成員(且類型 / 參數不同)時,需使用顯式實現避免沖突:

  • 語法:接口名.成員名(無訪問修飾符)。

  • 顯式實現的成員只能通過接口類型的變量訪問,不能通過類實例直接訪問。

示例(用戶代碼)

interface IA { int C { get; set; } }
interface IB { string C { get; set; } }
?
class Test : IA, IB
{// 顯式實現IA的C(int類型)int IA.C { get; set; }// 顯式實現IB的C(string類型)string IB.C { get; set; }
}
?
// 調用方式
Test test = new Test();
IA ia = test;
ia.C = 10; ?// 訪問IA的C
?
IB ib = test;
ib.C = "hello"; ?// 訪問IB的C
四、接口的繼承

接口支持多繼承(與類不同,類只能單繼承),即一個接口可以繼承多個其他接口,繼承后會包含父接口的所有成員。

規則

  • 接口繼承語法:interface 子接口 : 父接口1, 父接口2...

  • 類實現子接口時,必須同時實現子接口和所有父接口的成員

示例(用戶代碼)

// IStudent繼承IPeople,包含IPeople的所有成員
interface IStudent : IPeople
{string StudentId { get; set; }void Study();
}
?
// 實現IStudent必須同時實現IPeople的成員
class Student : IStudent
{// 實現IPeople的成員public string Name { get; set; }public int Age { get; set; }// 實現IStudent的成員public string StudentId { get; set; }public void Study() { /* 實現 */ }
}
五、接口與抽象類的對比(補充完整)
特性接口抽象類
實例化不能實例化不能實例化
成員實現所有成員無實現(純規范)可以包含抽象成員(無實現)和非抽象成員(有實現)
繼承 / 實現方式類 / 結構體通過:實現,支持多實現類通過:繼承,僅支持單繼承
成員訪問修飾符默認 public,不能顯式添加修飾符可以有 public、protected 等修飾符
包含的成員類型只能有屬性、方法、索引器、事件(無字段)可以有字段、屬性、方法、索引器、事件等
關系本質表示 “具有某種能力”(has-a)表示 “是一種”(is-a)
結構體支持結構體可以實現接口結構體不能繼承抽象類(結構體是值類型)
六、接口的典型應用場景
  1. 定義規范:為不同類提供統一的行為標準(如ICollection接口規定集合的基本操作)。

  2. 多態實現:通過接口類型變量調用不同實現類的方法,實現 “同一接口,不同行為”。

    interface IFly { void Fly(); }
    class Bird : IFly { public void Fly() { Console.WriteLine("鳥飛"); } }
    class Plane : IFly { public void Fly() { Console.WriteLine("飛機飛"); } }
    ?
    // 多態調用
    IFly fly1 = new Bird();
    IFly fly2 = new Plane();
    fly1.Fly(); ?// 輸出"鳥飛"
    fly2.Fly(); ?// 輸出"飛機飛"
  3. 解耦設計:降低類之間的依賴(如依賴注入中,通過接口注入而非具體類)。

總結

接口是 C# 中實現 “規范與實現分離” 的核心機制,通過強制實現、多實現支持、多繼承能力,靈活解決了類單繼承的局限,是實現多態、規范設計的重要工具。理解接口與抽象類的區別,能幫助在不同場景下選擇更合適的設計方式(需要代碼復用選抽象類,需要多能力規范選接口)。

三、泛型(Generic)

泛型是一種 “延遲指定類型” 的語法,允許在定義方法、類、接口時不指定具體類型,而在使用時動態指定,解決代碼復用和類型安全問題。

1. 基本定義與格式
  • 作用:避免為不同類型重復編寫相同邏輯(如 int、string 的通用方法),同時避免裝箱拆箱(提升性能)。

  • 常見形式

    • 泛型方法:方法名后加<T>,參數或返回值使用T作為類型。 示例:public static T Fn<T>(T i) { return i; }

    • 泛型接口:接口名后加<T>,成員使用T作為類型。 示例:interface ICalc<T> { T Add(T a, T b); }

    • 泛型類:類名后加<T>,成員使用T作為類型。 示例:class Calc3<T> : ICalc<T> { ... }

2. 核心特點
  • 類型推斷:調用泛型方法時,可省略類型指定(編譯器根據參數自動推斷)。 例如:Fn(123)等價于Fn<int>(123)

  • 多泛型參數:支持多個泛型參數(如<T1, T2>),分別指定不同類型。 示例:public static T1 Fn3<T1, T2>(T1 i, T2[] arr) { ... }

  • 默認值:通過default(T)獲取泛型類型的默認值(如引用類型為null,值類型為0)。

  • 性能優勢:相比object參數(需裝箱拆箱),泛型直接操作具體類型,減少性能損耗(如泛型測試中,泛型方法比object參數方法更快)。

3. 泛型約束(補充)

泛型默認支持所有類型,但可通過約束限制T的范圍(如僅允許引用類型、特定接口的實現類等),語法:where T : 約束條件。 常見約束:

  • where T : classT必須是引用類型。

  • where T : structT必須是值類型。

  • where T : 接口名T必須實現指定接口。

  • where T : 類名T必須是指定類或其派生類。

一、泛型的本質與價值

泛型是 C# 中一種參數化類型的機制,允許在定義類、方法、接口時不指定具體類型,而是在使用時動態指定。其核心價值在于:

  • 代碼復用:一套邏輯適配多種數據類型(避免為 int、string、自定義類型重復編寫相同代碼)。

  • 類型安全:編譯時檢查類型匹配(相比 object 類型轉換,減少運行時錯誤)。

  • 性能優化:避免值類型與引用類型之間的裝箱 / 拆箱操作(見泛型測試代碼分析)。

二、泛型的三種基本形式
1. 泛型方法

在方法名后添加<類型參數>,調用時指定具體類型(或由編譯器自動推斷)。

語法與特性

// 定義泛型方法
public static 返回值類型 方法名<T>(T 參數)
{// 邏輯實現,T可作為參數類型、返回值類型或局部變量類型
}
?
// 調用方式
方法名<int>(123); ? ? ? // 顯式指定類型
方法名("hello"); ? ? ? ?// 隱式推斷類型(T=string)

示例解析(用戶代碼):

public static T Fn<T>(T i) { return i; }
// 調用時T被替換為具體類型,等價于:
// public static int Fn(int i) { return i; }
// public static string Fn(string i) { return i; }
2. 泛型接口

接口定義時包含類型參數,實現接口時需指定具體類型或繼續使用泛型。

語法與特性

// 定義泛型接口
interface I接口名<T>
{T 方法名(T 參數);
}
?
// 實現方式1:指定具體類型
class 類名 : I接口名<int>
{public int 方法名(int 參數) { /* 實現 */ }
}
?
// 實現方式2:繼續使用泛型(泛型類實現泛型接口)
class 類名<T> : I接口名<T>
{public T 方法名(T 參數) { /* 實現 */ }
}

示例解析(用戶代碼):

// 泛型接口ICalc<T>
interface ICalc<T>
{T Add(T a, T b);T Sub(T a, T b);
}
?
// 實現1:指定T=int
class Calc : ICalc<int> { /* 實現int類型的加減 */ }
?
// 實現2:指定T=string
class Calc2 : ICalc<string> { /* 實現string類型的加減 */ }
3. 泛型類

類定義時包含類型參數,實例化時需指定具體類型。

語法與特性

// 定義泛型類
class 類名<T>
{private T 字段;public T 方法(T 參數) { /* 實現 */ }
}
?
// 實例化
var 變量 = new 類名<int>(); ?// T被替換為int

示例解析(用戶代碼):

class Calc3<T> : ICalc<T>
{public T Add(T a, T b){return default(T); ?// default(T)返回T類型的默認值}
}
?
// 使用時指定類型
var calc = new Calc3<double>();
double result = calc.Add(1.5, 2.5); ?// result=0.0(double默認值)
三、泛型的性能優勢(基于測試代碼)

用戶提供的_08_泛型測試代碼通過計時器對比了三種方式的性能:

方法類型實現方式10000 次調用耗時(示例值)性能差異原因
ShowInt具體類型(int)187ms無類型轉換,直接操作
ShowObjectobject 類型(裝箱 / 拆箱)235msint→object(裝箱)和 object→int(拆箱)消耗性能
Show<T>泛型方法220ms編譯時生成具體類型代碼,無裝箱 / 拆箱

結論:泛型性能接近具體類型方法,遠優于 object 類型(避免了值類型與引用類型轉換的開銷)。

四、泛型的關鍵特性
  1. 類型推斷 調用泛型方法時,若編譯器可從參數推斷出類型,可省略<類型>

    Fn2(1, new int[] { 1 }); ?// 推斷T=int
    Fn3(1, new string[] { "a" }); ?// 推斷TTest1=int,TTest2=string
  2. 多類型參數 泛型可包含多個類型參數(用,分隔):

    public static T1 Fn3<T1, T2>(T1 i, T2[] arr) { return i; }
  3. 默認值(default (T)) 用于獲取任意類型的默認值(值類型為0/false等,引用類型為null):

    return default(T); ?// 泛型中安全獲取默認值
五、泛型與其他技術的對比
技術優勢劣勢適用場景
泛型類型安全、性能好、代碼復用語法稍復雜通用邏輯(如集合、工具類)
重載方法簡單直觀類型增多時代碼量爆炸類型較少的場景
object 類型靈活(支持所有類型)性能差(裝箱)、類型不安全(需強制轉換)早期版本 C#(無泛型時)
總結

泛型是 C# 中實現 “編寫一次,適配多類型” 的核心機制,通過泛型方法、泛型類、泛型接口三種形式,在保證類型安全和性能的前提下,極大提升了代碼復用率。其設計思想貫穿于.NET Framework 的核心組件(如List<T>Dictionary<TKey, TValue>),是 C# 開發者必須掌握的重要特性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/90481.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/90481.shtml
英文地址,請注明出處:http://en.pswp.cn/web/90481.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

界面組件DevExpress WPF中文教程:Grid - 如何過濾節點?

DevExpress WPF擁有120個控件和庫&#xff0c;將幫助您交付滿足甚至超出企業需求的高性能業務應用程序。通過DevExpress WPF能創建有著強大互動功能的XAML基礎應用程序&#xff0c;這些應用程序專注于當代客戶的需求和構建未來新一代支持觸摸的解決方案。 無論是Office辦公軟件…

Excel——INDEX和MATCH傻傻分不清?

核心邏輯?先用 MATCH 找到目標姓名在表格中的 ?行號&#xff0c;再用 INDEX 根據行號 ?提取對應信息。就像查字典&#xff1a;先用拼音找到字的頁碼&#xff08;MATCH 找行號&#xff09;再翻到該頁看具體解釋&#xff08;INDEX 取數據&#xff09;?分步拆解&#xff08;以…

制造業低代碼平臺實戰評測:簡道云、釘釘宜搭、華為云Astro、金蝶云·蒼穹、斑斑低代碼,誰更值得選?

上回聊了斑斑和簡道云&#xff0c;不少同行私信問我其他幾個低代碼平臺怎么樣&#xff0c;今天就給大家來個"五大門派"終極對決&#xff01; 一、先說痛點 制造業搞數字化最怕三件事&#xff1a; 1.錢花了沒效果&#xff08;大平臺用不起&#xff0c;小工具不夠用&…

Jenkins中HTML文件顯示樣式問題解決方案

Jenkins中HTML文件顯示樣式問題解決方案 問題描述 在Jenkins中歸檔的HTML文件顯示格式失效&#xff0c;樣式無法正常顯示&#xff0c;但在本地瀏覽器中打開卻能正常顯示。 問題原因 Jenkins為了安全考慮&#xff0c;默認設置了嚴格的內容安全策略(Content Security Policy, CSP…

四、配置文件

文章目錄1. 文件類型1.1 properties1.2 yaml1.2.1 簡介1.2.2 基本語法1.2.3 數據類型1.2.4 示例2. 配置提示1. 文件類型 1.1 properties 同以前的properties的用法 1.2 yaml 1.2.1 簡介 YAML 是 “YAML Ain’t Markup Language”&#xff08;YAML 不是一種標記語言&#x…

Python常用醫療AI庫以及案例解析(場景化進階版)

?? 框架應用拓撲圖用例 #mermaid-svg-lZ1J5KCaVWBV2kAu {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-icon{fill:#552222;}#mermaid-svg-lZ1J5KCaVWBV2kAu .error-text{fill:#552222;st…

Python高效操作Kafka實戰指南

Python操作Kafka的高效 以下是使用Python操作Kafka的高效消息發送實例,涵蓋基礎發送、批量處理、異步回調等場景。示例基于confluent-kafka庫(推薦)和kafka-python庫,代碼均經過實測。 流程圖 基礎消息發送(同步) from confluent_kafka import Producerproducer = Pro…

離線快速處理PDF格式轉化的方案

日常辦公中&#xff0c;PDF 幾乎成了我們離不開的文件格式。然而像 WPS 這樣的工具&#xff0c;不少實用功能都需要額外付費才能解鎖。它的打開方式很簡單&#xff0c;雙擊桌面圖標即可運行。它不會彈出主界面&#xff0c;而是默默駐留在系統托盤區&#xff0c;需要時雙擊圖標就…

SpringMVC注解與SpringCloudOpenFeign注解對比

1. 背景知識 梳理SpringMVC和SpringCloudOpenFeign常用注解后&#xff1a; Spring MVC中常用注解_筆記-CSDN博客Spring Cloud OpenFeign 常用注解_筆記-CSDN博客 這里對兩類注解做個對比。理解兩者定位&#xff08;服務端 vs 客戶端&#xff09;是掌握注解使用的關鍵&#x…

Linux 時間同步的流程

一、問題時間RTC時間、系統時間(UTC)和本地時間的關系如下&#xff1a;?RTC時間?&#xff08;硬件時鐘&#xff09;&#xff1a;顯示為UTC時間格式&#xff1a;02:50:35/02:51:28由主板電池供電&#xff0c;獨立于系統運行?12通常存儲UTC時間&#xff08;Linux默認配置&…

VSCode——python選擇解釋器消失的解決辦法

VSCode軟件的左下角 設置——檢查更新&#xff1a;

笛卡爾積規避:JOIN條件完整性檢查要點

笛卡爾積是數據庫查詢中的高風險操作&#xff0c;多表JOIN時缺失有效關聯條件會導致結果集指數級膨脹&#xff0c;引發?性能塌方?甚至系統崩潰?。以下是核心檢查策略及防御方案&#xff1a;一、笛卡爾積的致命影響??性能塌方?百萬級訂單表與千萬級用戶表缺失ON條件時&…

Vimba相機二次開發教程,基于Python

文章目錄安裝獲取圖像輔助數據Vimba 是由 Allied Vision 開發的一套軟件開發套件&#xff08;SDK&#xff09;&#xff0c;主要用于控制和操作其工業相機產品。它提供了一套完整的 API 和工具&#xff0c;支持多種操作系統和編程語言&#xff0c;便于開發者快速集成相機功能到應…

電子測試行業軟件ATECLOUD與ETEST對比分析-納米軟件

在當今科技飛速發展的時代&#xff0c;電測行業對于自動化測試平臺的依賴程度日益加深。高效、精準的自動化測試平臺不僅能夠提升測試效率&#xff0c;還能確保產品質量。ATECLOUD 與 ETEST 作為電測行業中頗受矚目的自動化測試平臺&#xff0c;各自展現出獨特的優勢與特點。下…

自動化測試中的常見測試方法

自動化測試中的常見測試方法在自動化測試中&#xff0c;除了數據驅動&#xff08;Data-Driven Testing&#xff09;&#xff0c;還有多種主流方法&#xff0c;每種方法適用于不同場景和需求。以下是常見的自動化測試方法分類及詳解&#xff1a;一、關鍵字驅動測試&#xff08;K…

口語01-don‘t judge a book by its cover

Dont judge a book by its cover 不要以貌取人1 the most advanced thing2 stack3 right4 frantically5 be annoyed with sb6 Get your stuff off my desk7 But today I came to class and was running a few minutes late.8 take my seat&#xff1a;占我座位 / 坐我的位置9 s…

《Uniapp-Vue 3-TS 實戰開發》自定義預約時間段組件

這個組件可以直接在 uniapp 項目中使用,提供了 24 小時時段選擇功能,支持單選 / 多選、預設時段選擇、隨機選擇等功能。 html版本: <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="vi…

《Uniapp-Vue 3-TS 實戰開發》自定義環形進度條組件

引言 在UniApp中使用Vue3和TypeScript開發環形進度條組件,我們可以考慮三種技術:Canvas、SVG和純HTML(利用CSS)。考慮到兼容性、實現難度和效果,SVG是較好的選擇。它可以輕松實現環形進度條,支持漸變色,并且可以通過屬性精確控制進度,同時在不同分辨率屏幕上清晰顯示…

MybatisPlus-17.擴展功能-JSON處理器

一.JSON處理器數據庫中有的字段會以JSON格式來進行存儲。類型為json類型。但是在java中我們沒有這樣的數據類型&#xff0c;一般會以字符串接收&#xff0c;這樣就會導致如果想要從數據庫中獲取json格式中的key和value的話會比較麻煩&#xff0c;還要進行字符串操作。那么有沒有…

【Web】DASCTF 2025上半年賽 wp

目錄 phpms 再短一點點 澤西島 phpms dirsearch請求太快會報429&#xff0c;要設置一手--delay&#xff0c;掃出來.git 跑一下githacker git stash list git stash show -p 注釋的繞過參考&#xff1a;從國賽想到的一些php繞過注釋符trick 發現很多函數都被disable了 這…