本帖最后由 Cool_Breeze 于 2021-3-18 14:50 编辑
[C#] 纯文本查看 复制代码 using System;
using System.Collections.Generic;
class Test
{
// 泛型结构体
struct nameList<type>
{
// type 类型需要外部调用者给出
public type a;
}
// 一般结构体
struct nameValue
{
public int a;
// 强制转换类型
// implicit 隐式转换
public static explicit operator nameList<nameValue>(nameValue x){
// 说白了就像是在 nameList<nameValue> 构造器里面 创建一个
// nameList<nameValue> 实例,然后返回这个实例
// 创建一个 nameList<nameValue> 类型 v
// 将 nameValue x 类型的成员a(int)赋给v里面的类型nameValue的成员a
nameList<nameValue> v = new nameList<nameValue>();
// v 等于 nameList<nameValue>
// a 等于 nameList<nameValue>.a
// a 等于 nameValue.a
v.a.a = x.a;
// 然后返回类型 nameList<nameValue> 完成转换
return v;
}
}
static void Main(){
nameList<int[]> a;
// 分配内存空间
a.a = new int[]{1,2,3,4,};
// a存放的数组类型(引用类型) 将会修改同一个内存地址区域
foreach (var n in a.a){
Console.WriteLine(n); // 1 2 3 4
}
nameList<int[]> b;
b.a = a.a;
// 改变b.a 的值
for (int i=10, index=0; i>6; i--, index++){
b.a[index] = i;
Console.WriteLine(i); // 10 9 8 7
}
// a.a的值改变
foreach (var n in a.a){
Console.WriteLine(n); // 10 9 8 7
}
// v 类型为nameValue
nameList<nameValue> v;
// 创建一个 nameValue 值 x
nameValue x;
x.a = 100;
// v.a存放的一般结构体 (值类型)
// 强制转换类型方法已经写明
// 将x 显示转换为v类型 v是x一份副本
v = (nameList<nameValue>)x;
Console.WriteLine(v.a.a); // 100
// vr
nameList<nameValue> vr;
vr = v;
// 赋值后更改v.a.a的值, vr.a.a的值不变
v.a.a = 200;
Console.WriteLine(vr.a.a); // 100
CSharpVidoe book = new CSharpVidoe();
book["C#"] = "刘铁锰C#入门详解";
Console.WriteLine(book["C#"]);
Console.WriteLine(book["C"]);
}
// 索引
class CSharpVidoe
{
// 创建一个字典key为string 值为int
Dictionary<string, string> bookDict = new Dictionary<string, string>();
// 索引属性
// 引入的索引器的元素类型 string 类型数据,参数为key
public string this[string name]
{
get
{
// 检查字典里面的key是否包涵具有 输入的key
if (this.bookDict.ContainsKey(name))
{
// 存在直接返回
return bookDict[name];
}
else
{
// C# 编译器将 null 字符串视为空字符串进行处理
// 不存在返回一个空值
return null;
}
}
// 这里的 value 是在set上下文中是关键字
// 代表接收的输入值
set
{
if (this.bookDict.ContainsKey(name))
{
// 具有,更新值
// value 是 string 类型
this.bookDict[name] = value;
}
else
{
// 没有,加入值
this.bookDict.Add(name, value);
}
}
}
}
}
[C#] 纯文本查看 复制代码 using System;
class Program
{
static void Main()
{
IndexExerise test = new IndexExerise();
test[1] = "123";
test[2] = "123";
test[3] = "123";
for (sbyte i=0; i<IndexExerise.Size; i++)
Console.WriteLine(test[i]); // 整数索引
Console.WriteLine(test["12"]); // 字符串索引
}
class IndexExerise
{
static public sbyte Size = 10;
private string[] array = new string[Size];
public IndexExerise()
{
for (sbyte i=0; i<IndexExerise.Size; i++)
{
array[i] = "N/A";
}
}
// 下标索引方法实现,使用的方括号 this [ int n ]
public string this[int n] // 整数索引
{
get
{
string temp;
if (n >=0 && n < IndexExerise.Size) // 检查是否越界
temp = array[n];
else
temp = "None";
return temp;
}
set
{
if (n >=0 && n < IndexExerise.Size)
array[n] = value;
}
}
// 重载索引器
public int this[string key] // 字符串索引
{
get
{
int res = -1;
for (sbyte i=0; i<IndexExerise.Size; i++)
{
if (array[i] == key) // 检查数组里面是否包含此字符串
{
res = i;
break;
}
}
return res;
}
}
}
} |