C#基础
int[,] a = new int[3,4] {0, 1, 2, 3,} , {4, 5, 6, 7} , {8, 9, 10, 11} };
即声明一个名称为a的三行四列的二维数组
多态
在C#中多态可分为“静态多态性”与“动态多态性”
静态多态性可以通过以下方式实现:
-
方法重载:(overload)在同一个类中,方法名相同,参数不同;
-
方法重写:在子类中重写父类中的方法,每一个所继承的子类中有不同重写的实现;
-
接口实现:在接口中编写相同方法的名称,每一个所继承的子类中有不同的实现;
动态多态性:
通过抽象类实现多态
覆写(new),重写(override)
覆写(new)
子类在继承父类时,可以通过 "new" 关键字对父类中成员进行覆写(即重新定义父类成员)。
重写(override)
子类在继承抽象类(abstract),或者包含虚方法(virtual) 的父类时,可以通过 override 关键字对父类中的成员进行重写。
abstract抽象类
通过 "abstract" 关键字声明一个抽象类或抽象方法,抽象方法只能声明在抽象类中。
在抽象类中,既可以包含抽象方法,也可以包含非抽象的方法。抽象方法不能包含方法体。
在子类继承抽象类(父类)时,要想调用父类中的抽象方法,必须通过override重写来实现。
子类在继承抽象类时,必须全部实现父类中成员。
interface接口
接口中不可以有字段,可以有属性,方法(不能包含方法体,不能有访问修饰符),事件,索引器。
接口主要使用场景:
-
定义一组类的行为,指定一个类中必须要继承哪几个方法。
-
实现多继承,一个类可以继承多个接口。
集合
在C#中通过集合可以存储和操作数据,集合包括(List,Hashset,Hashtable,Dictionary,Queue,Stack)
List 使用动态数组(可变长度)添加集合类,在内存中连续存储元素,支持随机访问和元素的添加,删除,排序等操作。
Hashset 特点:用于存储独特的对象集合,每个对象只能出现一次,内部使用哈希表实现。
优势:添加与查找元素的速度非常快,支持泛型和迭代器。
用法:Add() 用于添加元素,Remove() 用于删除元素,Contains 用于判断集合中是否包含某个元素。
HashSet<string> mySet = new HashSet<string>();
mySet.Add("apple");
mySet.Add("banana");
mySet.Add("orange");
if (mySet.Contains("apple"))
{
Console.WriteLine("Found apple.");
}
Hashtable 特点:通过键值对存储元素,其中键值对可以为任意类型,但是键是唯一的。
用法:Add() 用于添加元素,Remove() 用于删除元素,Contains 用于判断集合中是否包含某个元素。
Hashtable myTable = new Hashtable();
myTable.Add("apple", "red");
myTable.Add("banana", "yellow");
myTable.Add("orange", "orange");
if (myTable.ContainsKey("apple"))
{
Console.WriteLine("Apple is {0}.", myTable["apple"]);
}
Dictionary 特点:通过键值对存储元素,Dictionary比Hashtable更加类型安全,也更容易使用。Dictionary仅支持特定的键类型,并且使用了更好的算法来处理哈希码的计算和存 储。 Hashtable允许任何类型的键并且它的哈希算法是相当简单的,这可能导致冲突更多,影响性能。当需要存储键值对时,如果键类型比较特定,建议使用 Dictionary,而当键类型较为复杂时,则更适合使用Hashtable。
Dictionary<string, int> score = new Dictionary<string, int>();
score.Add("Tom", 90);
score.Add("Jerry", 80);
score.Add("Tony", 70);
int jerryScore = score["Jerry"];
Console.WriteLine("Jerry's score is: " + jerryScore);
if (score.ContainsKey("Tom"))
{
int tomScore = score["Tom"];
Console.WriteLine("Tom's score is: " + tomScore);
}
foreach (KeyValuePair<string, int> kvp in score)
{
Console.WriteLine(kvp.Key + ": " + kvp.Value);
}
**Queue 队列:**先进先出
**Stack 栈:**先进后出
Stack<string> stack = new Stack<string>();
stack.Push("Tom");
stack.Push("Jerry");
stack.Push("Tony");
while (stack.Count > 0)
{
string name = stack.Pop();
Console.WriteLine("Processing " + name);
}
泛型
泛型方法,泛型接口,泛型类
class Stack<T>
{
private List<T> items = new List<T>();
public void Push(T item)
{
items.Add(item);
}
public T Pop()
{
if (items.Count == 0)
{
throw new InvalidOperationException("Stack is empty");
}
int index = items.Count - 1;
T item = items[index];
items.RemoveAt(index);
return item;
}
}
线程
posted on 2023-07-06 15:28 Cirrocumuli 阅读(24) 评论(0) 收藏 举报
浙公网安备 33010602011771号