1、C#的输入Console.ReadLine()是字符串,以回车结束输入,若要输入int型需要Convert转换
using System; public class Example { public static void Main() { string s = Console.ReadLine(); int x = Convert.ToInt32(s); s = Console.ReadLine(); int y = Convert.ToInt32(s); Console.WriteLine( x + y ); } }
2、string的Split,Length函数,头字母大写,double数组申请注意,用方括号,一行多个数据的输入,用到字符串的分割,转换
using System; public class Example { public static void Main() { string s = Console.ReadLine(); //一行输入多个数据 string[]sArr = s.Split(' '); //分割字符串s.Split double []dArr = new double[sArr.Length]; //sArr.Length for(int i=0; i<sArr.Length; ++i) { dArr[i] = Convert.ToDouble(sArr[i]); //Convert Console.WriteLine( "doubleArray:" + dArr[i]);//字符串连接 Console.WriteLine( "doubleArray:{0}", dArr[i]);//占位符 } } }
3、decimal 关键字,指示 128 位数据类型,与浮点型相比,decimal 类型具有更高的精度和更小的范围,这使它适合于财务和货币计算,大致范围, (-7.9 x 1028 - 7.9 x 1028) / (100 - 28),精度,28-29 个有效位
4、浮点常量默认为double,对float变量赋值的常量后缀加 f ,对decimal类型的变量赋值的常量后缀加 m
5、自动类型var
using System; namespace Examp01 { class Program { static void Main(string[] args) { var s = Console.ReadLine(); var x = Convert.ToInt32(s); s = Console.ReadLine(); var y = Convert.ToInt32(s); var z = x + y; Console.WriteLine(z); } } }
using System; namespace Example02 { class Program { static void Main(string[] args) { //在一行中输入多个数据 var s = Console.ReadLine(); var sSplit = s.Split(' '); var a = new double[sSplit.Length]; var sum = 0.0; for(var i=0;i<sSplit.Length;i++) { a[i] = Convert.ToDouble(sSplit[i]); sum = sum + a[i]; } Console.WriteLine(sum); } } }
using System; namespace Homework01 { class Program { static void Main(string[] args) { var input = Console.ReadLine(); var inputSplit = input.Split(' '); //分割输入的数据 var max = Convert.ToInt32(inputSplit[0]); //存储输入的第一个数据到max中 //从第二个数开始,依次和max比较,如果比max大,则替换max中的数 //比较之前先要把数据从字符串类型转换为整数 for (int i = 1; i < inputSplit.Length; i++) { var temp = Convert.ToInt32(inputSplit[i]); if(temp>max) { max = temp; } } Console.WriteLine(max); } } }
6、数据+含义,适用于传输数据,而不是显示数据。
7、c#的数组属于引用类型,定义,如 double []d = new double[10] ; 隐式初始化,数值型的初始化为0,引用型的初始化为null
8、C++代码 一样可以编译成中间码,与编译器有关。
9、c# CLR和上面的库,我们称为架构。
10、在编译的时候编译器会把程序中出现的所有变量名都换成相对内存地址,变量名不占内存
11、在C#中做了很多的封装,我们根本看不到消息的处理过程,通过层层封装最后我们看到的只是事件 (event) 这个概念,在C#中event是个关键字
using System; public delegate void SayHello(string str); //声明一个代理SayHello public class Example { public static void Main() { A a = new A(); B b = new B(); a.onSayHello += b.onSayHello; //B的onSayHello事件注册到A a.done(); //触发 } } public class A { public event SayHello onSayHello; //定义一个事件onSayHello public void done() //触发事件 { Console.WriteLine("A: SayHello"); onSayHello("A: SayHello"); } } public class B { public void onSayHello(string str) //B 的事件onSayHello { Console.WriteLine("B: Hello"); } }
12、C#数据类型,分为值类型,引用类型;值类型分为简单类型,枚举类型,结构类型;引用类型分为类类型,接口类型,数组类型,委托类型
13、枚举示例,枚举成员的值可以相同,成员之间用逗号隔开,最后一个没有逗号
//枚举示例 public enum TimeofDay:uint { Morning = 1, //成员之间是用逗号隔开的 Afternoon = 2, Evening = 3 //最后一个枚举成员后没有逗号 }
14、c# 数值类型与引用类型相互转化,含有对象特性的数值,可以表现为数值型,就是数值,想表现为对象特性就是对象。
boxing ,unboxing 强大。一切皆对象也是相对的,不是绝对的。
15、c# byte 一个字节,short char 两个字节,没有乘方运算符
switch 语句的变量可以是整形,枚举,字符串;每个case ,必须有break,包括default语句; 这点与c++不同
16、vs c# 窗体属性的TransparencyKey的颜色与BackColor的颜色设置一样,窗体可以透明,窗体的控件的颜色不可以与它们一样,否则也透明了。
17、c# 构造方法调用另一构造方法,用this
public Person(): this(0,"")
{//构造方法的其他语句}
18、c# 构造方法,用父类的构造方法,
Student(string name, int age, string school):base(name,age)
{this.school = school;}
19、c# as运算符只能针对引用类型,不能转换,值为null, 不会引起异常
Student s = p as Student; (p为Person对象,s值为null)
is 运算符可以判断一个对象是否是某个类或其子类的实例。
所有的类,都是直接或间接的继承object类,也就是System.Object类(object是System.Object的别名)
20、 c# 默认访问权限是internal,即一个程序集中可以访问
21、 c# static构造方法只会调用一次,但是其调用时间是不确定的。sealed不可以继承,readonly只能修饰字段,const可以修饰局部变量
22、平台= CPU+OS
23、语言跨平台原理:不能编译成机器语言,因为那样就与平台相关了,编译为中间语言,再由解释器二次编译,解释执行
比如Java解释器,也就是虚拟机,在不同的系统上有不同的虚拟机,即不同的解释器,实现了中间码的执行,与平台无关。
24、C# 结构,是值类型,是sealed的
25、C# List 可以用下标引用,List不是链表吗?
26、结构示例,使用有参构造定义变量用new,静态变量结构名使用,如,A.str = "12345";
//结构示例 struct A { public int x; //不能直接赋值 public int y; public static string str = null; //静态变量可以初始化 public A(int x, int y) { this.x = x; this.y = y; Console.WriteLine("x={0},y={1},str={2}",x,y,str); } }
27、const常量可以同时声明若干,如,const int months = 12, weeks = 52, days = 365;,常数后面加后缀可以指明常数是什么类型的
28、https://www.cnblogs.com/ClassNotFoundException/p/6198805.html
29、C# Brush是个抽象类,不可以实例化,它有若干派生类,比如,SolidBrush类
30、c# 中的 DictionaryEntry 类是干什么的?Hashtable 内的每一组对象就是一个DictionaryEntry(keys , values)
31、如果一个字符串前以@开头的,是逐字字符串常数,字符串里的转义字符意义取消,即没有转义字符
32、计算函数值,优先于任何运算符,即一个表达式中有函数调用,先计算函数值
33、Convert.ToInt32(1.5); , 四舍五入
34、c#类访问控制,internal,内部类型,只有在同一文件中才可以访问,如果没有类修饰符,系统默认internal
35、c#类的字段、方法的访问控制,internal protected,受保护内部的
36、类属性,是对类字段的包装,属性set代码段可以检查对字段的赋值,C#自实现属性可以自动为属性创建字段
访问修饰符 数据类型 属性名 { get{ get访问器代码块 } set{ set访问器代码块 } }
//属性定义 private string id = "0000"; //学号 public string ID //属性 { get{ return id; } set{ id = value; //value是关键字 } } //属性使用 //对象名.属性名 = 属性值;
using System; public class Program { public static void Main() { A a = new A(); a.ID = "00001"; Console.WriteLine(a.ID); } } class A{ private string id = "0000"; //字段 public string ID //属性 对字段的包装 { get{ return id; } set{ id = value; } } }
public string ID{ get; set; } //自实现属性写法,在对字段不需要任何赋值检查的情况下使用
37、类对象,通过类非static方法 可以获取或修改static 字段
38、c# static字段的值在运行时才能确定,在被使用时初始化
39、C# 类,接口,方法的命名遵循 Pascal 命名法,即每个单词的首字母大写; 方法名一般采用动词来命名;变量的命名规则遵循 Camel 命名法;常量的单词的所有字母大写
40、