JAVA与C#:https://zhuanlan.zhihu.com/p/25106669

转义符

转义符指的就是一个\+一个特殊的字符,组成了一个具有特殊意义的字符。

\n:表示换行

\":表示一个英文半角的双引号

\t:表示一个tab键的空格

\b:表示一个退格键,放到字符串的两边没有效果。

@符号

1、取消\在字符串中的转义作用,使其单纯的表示为一个\

2、将字符串按照编辑的原格式输出

类型转换

Convert.ToInt32("sda122");

int.Parse("123asd");

int.TryParse("123",out 变量);//返回boolean,尝试将字符串转为int,转换成功后赋值给变量,返回true;

产生随机数

Random r = new Random();

int rNumber = r.Next(1,10);

三种特殊参数

84ff402e3f4f494ab4db2aa9de2daa5

属性

对字段(field)的二次封装处理。

1
2
3
4
5
6
7
8
9
10
11
//普通属性
private string _name;
public string Name{
get{return _name;}
set{_name = value;}
}
//自动属性(自动生成私有字段,不能写方法体)
public int Age{
set;
get;
}

字符串

我们可以讲字符串看做是char类型的一个只读数组。

s[0],可通过下标直接访问字符。

ToCharArray();将字符串转换为char数组

new string(char[] chs):能够将char数组转换为字符串

字符串提供的各种方法

https://blog.csdn.net/qq_27361571/article/details/51382840

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Length:获得当前字符串中字符的个数
ToUpper():将字符转换成大写形式
ToLower():将字符串转换成小写形式
Equals (1essonTwo, StringComparison.OrdinalIgnoreCase):比较两个字符串
Split():分割字符串,返回字符串类型的数组。
Substring():解决字符串。在截取的时候包含要截取的那个位置。
Indexof():判断某个字符串在字符串中第一次出现的位置,如果没有返回—1
LastIndexof():判断某个字符串在字符串中最后一次出现的位置
Startswith():判断以....开始
Endswith():判断以...结束
Replace():将字符串中某个字符串替换成一个新的字符串Contains():判断某个字符串是否包含指定的字符串
Trim() :去掉字符串中前后的空格
TrimEnd():去掉字符串中结尾的空格TrimStart():去掉字符串中前面的空格
string.IsNullOrEmpty():判断一个字符串是否为空或者为nu11
string.Join():将数组按照指定的字符串连接,返回一个字符串。

继承

public class Student : Person{}

单根性,传递性

private不可继承,构造函数不可继承。

创建子类对象时,会先创建一个父类对象,默认调用父类无参构造函数(才能使用父类属性)。所以,如果在父类中重新写了一个有参数的构造函数之后,那个无参数的就被干掉了,子类就调用不到了,所以子类会报错。

解决办法:

1)、在父类中重新写一个无参数的构造函数。

2)、在子类中显示的调用父类的构造函数,使用关键字:base() =>显式有参构造函数

ArrayList

1
2
3
4
5
6
7
8
9
10
ArrayList list = new ArrayList();
list.Add();
list.AddRange();
list.clear();清空所有元素
list.RemoveAt(0);根据下标去删除元素
list,RemoveRange(0,3);根据下标去移除一定范围的元素 list.Sort();//升序排列
list,Reverse();反转
list,Insert(1,“插入的”);在指定的位置插入一个元素
list.InsertRange(0,new string[](“张三”,“李四”});在指定的位置插入集合
bool b=list,Contains(1);判断是否包含某个指定的元素

HashTable

HashTable遍历foreach(var item in ht.Keys){}

字典遍历foreach(KeyValuePair<int string> kv in dic)

1
2
3
//区分字典与哈希表
Hashtable ht = new Hashtable();
Dictionary<int, string> zd = new Dictionary<int, string>();

实现多态的方式

1.虚方法

相当于JAVA的@override方法;

1
2
父类:public virtual void hello(){};
子类: public override void hello(){};

2.抽象类(抽象类中可以有非抽象成员,子类继承抽象类,必须实现所有抽象方法,属性,变量)

3.接口(类实现接口,必须重写成员 。结构中不允许添加访问修饰符,默认public )

访问修饰符

protected :受保护的,只能在当前类的内部以及该类的子类中访问。
public :公开的公共的
private :私有的,只能在当前类的内部访问
internal :只能在当前项目中访问。在同一个项目中, internal 和 public 的权限是相同的
protected internal : protected + internal

两个特殊类修饰符:partial部分类/sealed密封类(不允许被继承)

文件读写及序列化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//序列化
person aa = new person("aa","18");
using (FileStream fs = new FileStream(@"C:\Users\DELL\Desktop\111.txt",FileMode.Append,FileAccess.Write))
{
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs,aa);
}
//反序列化
person p;
using (FileStream fs = new FileStream(@"C:\Users\DELL\Desktop\111.txt",FileMode.OpenOrCreate,FileAccess.Read))
{
BinaryFormatter bf = new BinaryFormatter();
p = (person)bf.Deserialize(fs);
}
p.oi();

多线程

1
2
3
Thread th = new Thread(method);
th.IsBackground = true;
th.Start(object);

委托

定义委托:public delegate void DelSayHi(string name);

1.使用中间类

1
2
SayHi("name",SayHiChinese);
public static void SayHiChinese(string name,DelSayHi del){...}

2.将方法交给委托

1
2
DelSayHi del = SayHiChinese;
del("name");

3.匿名函数

1
2
3
4
5
6
DelSayHi del = delegate(string name){
...
}
//简化
DelSayHi del = (string name)=>{...}
del("name");

多播委托:委托可以通过+-运算符,指定要执行的函数,一次性执行所有。

网络编程

服务端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private Socket sockeyWatch;
private Socket socketSend;
private void button1_Click(object sender, EventArgs e)
{
sockeyWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);
IPAddress ip = IPAddress.Any;
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(sport.Text));
sockeyWatch.Bind(point);
MessageBox.Show("success");
sockeyWatch.Listen(10);

Thread th = new Thread(Listen);
th.IsBackground = true;
th.Start(sockeyWatch);
}

void Listen(object o)
{
Socket socketWatch = o as Socket;
while (true)
{
try
{
socketSend = socketWatch.Accept();
dicSocket.Add(socketSend.RemoteEndPoint.ToString(),socketSend);
cboUsers.Items.Add(socketSend.RemoteEndPoint.ToString());
ShowMsg(socketSend.RemoteEndPoint.ToString() + ":connect success!");

//开启线程接收消息
Thread th = new Thread(Recive);
th.IsBackground = true;
th.Start(socketSend);
}catch{Console.WriteLine("监听时有错误但被捕获了");}
}
}

private Dictionary<string, Socket> dicSocket = new Dictionary<string, Socket>();
void Recive(object o)
{
Socket socketSend = o as Socket;
while (true)
{
try
{
byte[] buffer = new byte[1024 * 1024 * 2];
//实际有效字节
int r = socketSend.Receive(buffer);
if (r == 0)
{
break;
}

string str = System.Text.Encoding.UTF8.GetString(buffer);
ShowMsg(socketSend.RemoteEndPoint + ":" + str);
}catch{Console.WriteLine("接收消息时有错误但被捕获了");}
}
}

void ShowMsg(string str)
{
txtLog.AppendText(str +"\r\n");
}

private void Form1_Load(object sender, EventArgs e)
{

}

private void button2_Click_1(object sender, EventArgs e)
{
string str = txtMsg.Text;
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
string ip = cboUsers.SelectedItem.ToString();
dicSocket[ip].Send(buffer);
}
}
}
客户端
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace WindowsFormsApp3
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}

private Socket socketSend;

void ShowMsg(string str)
{
txtLog.AppendText(str +"\r\n");
}
//给服务端发消息
private void button2_Click(object sender, EventArgs e)
{
string str = txtMsg.Text.Trim();
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(str);
socketSend.Send(buffer);
}

private void button1_Click_1(object sender, EventArgs e)
{
// if (socketSend != null)
// {
// ShowMsg("已连接,无需重复操作");
// }
// else
// {
socketSend = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
//192.168.0.106
IPAddress ip = IPAddress.Parse(txtServer.Text);
IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
socketSend.Connect(point);
ShowMsg("success");

Thread th = new Thread(Recive);
th.IsBackground = true;
th.Start(socketSend);
// }
}
void Recive(object o)
{
Socket socketSend = o as Socket;
while (true)
{
try
{
byte[] buffer = new byte[1024 * 1024 * 2];
//实际有效字节
int r = socketSend.Receive(buffer);
if (r == 0)
{
break;
}

string str = Encoding.UTF8.GetString(buffer, 0, r);
ShowMsg(socketSend.RemoteEndPoint + ":" + str);
}catch{Console.WriteLine("接收消息时有错误但被捕获了");}
}
}
}
}