C# 常用备忘
1、C# 对应java中关键字:base—super、this—this、sealed—final
(1)base关键字 ——对应java super
C#中base关键字的详解,等价java super()方法:https://blog.csdn.net/qq_45096273/article/details/106605959
(2)this —— this
(3)sealed —— 对应java final
sealed关键字
应用于某个类时,sealed 修饰符可阻止其他类继承自该类。类似于Java中final关键字。
在下面的示例中,类 B 从类 A 继承,但是任何类都不能继承自类 B 。
class A {} sealed class B : A {}
sealed 修饰方法或属性
能够允许类从基类继承,并防止它们重写特定的虚方法或虚属性。
1)sealed是对虚方法或虚属性,也就是同override一起使用,如果不是虚方法或虚属性会报出错误:cannot be sealed because it is not an override
public class D { /* ConsoleApplication1.MSFun.Sealed.D.M()' * cannot be sealed because it is not an override */ public sealed void M() { Console.WriteLine("D.M()"); } }
2)防止子类重写特定的方法或属性
public class A { protected virtual void M() { Console.WriteLine("A.M()"); } protected virtual void M1() { Console.WriteLine("A.M1()"); } } public class B : A { protected sealed override void M() { Console.WriteLine("B.M()"); } protected override void M1() { Console.WriteLine("B.M1()"); } } public sealed class C : B { /* ConsoleApplication1.MSFun.Sealed.C.M()': * cannot override inherited member 'ConsoleApplication1.MSFun.Sealed.B.M()' * because it is sealed */ //protected override void M() { Console.WriteLine("C.M()"); } protected override void M1() { Console.WriteLine("C.M1()"); } }
2、js:数组排序sort()
sort()方法使数组中的元素按输入代码照一定的顺序排列。语法: arrayObject.sort(方法函数)
参数说明:
- 如果不指定<方法函数>,则按unicode码顺序排列。
- 如果指定<方法函数>,则按<方法函数>所指定的排序方法排序。
myArray.sort(sortMethod);
注意: 该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:若返回值<=-1,则表示 A 在排序后的序列中出现在 B 之前。若返回值>-1 && <1,则表示 A 和 B 具有相同的排序顺序。若返回值>=1,则表示 A 在排序后的序列中出现在 B 之后。
(1)使用sort()将数组进行排序,代码如下:
<scripttype="text javascript"=""> var myarr1 = newArray("Hello","John","love","JavaScript"); var myarr2 = newArray("80","16","50","6","100","1"); document.write(myarr1.sort()+" "); document.write(myarr2.sort());
运行结果:
Hello,JavaScript,John,love
1,100,16,50,6,80
注意:上面的代码没有按照数值的大小对数字进行排序。
(2)如要实现上面这一点,就必须使用一个排序函数,代码如下:
<scripttype="text javascript"=""> functionsortNum(a,b) { return a - b; //升序,如降序,把“a - b”改成成“b - a” } var myarr = newArray("80","16","50","6","100","1"); document.write(myarr+ " "); document.write(myarr.sort(sortNum)); (<ahref="< span="">http://www.dztcsd.com/">资质代办)
3、C#数组排序
直接可以调用 Array.Sort()的方法就可以从小到大排序,如果要从大到小排序,只需要再次调用 Array.Reverse()方法就可以了
Array.Sort(arr1)
4、C# 中StringBuilder没有倒序排列的方法Reverse(),排序需要借助Array的排序方法
StringBuilder先转成Array,排序后再转回StringBuilder——
5、C#声明常量
(1)静态常量(编译时常量):const
在编译时就确定了值,必须在声明时就进行初始化且之后不能进行更改,可在类和方法中定义
const double a=3.14;// 正确声明常量的方法
※const声明的常量默认为静态的,不用实例化就可以直接调用,因此声明时不能和static关键字同时存在
(2)动态常量(运行时常量):readonly
在运行时确定值,只能在声明时或构造函数中初始化,只能在类中定义。
readonly int a=1; // 声明时初始化 readonly int b; // 构造函数中初始化 Program(){ b=2; }
6、C# 实现类似java Class类的-newInstance()方法
newInstance() 方法用于创建此 Class 对象表示的类的新实例。
newInstance() 方法是一个非静态方法,它只能通过类对象访问
C#中如何实现:
Type type = Type.GetType(“TestSpace.TestClass”); Object[] constructParms = new object[] {“hello”}; //构造器引数 TestClass obj =(TestClass)Activator.CreateInstance(type,constructParms); //如果类的构造器是无引数的,就呼叫这个 TestClass obj = (TestClass)Activator.CreateInstance(t);
java和C#写法对比:
7、C#对应Java Class.forName作用
Class.forName(xxx.xx.xx)返回的是一个类,
A a = (A)Class.forName(“pacage.A”).newInstance();
这和 A a = new A(); 是一样的效果。
——因此,java中:Class.forName("java.lang.String")
——C# 中可用 A a = Type.GetType("java.lang.String")替代
8、C#跳出循环的几种方法
break语句:终止并跳出循环体。
continue语句:终止当前循环,重新开始一个新的循环。
goto语句:跳转到指定位置 。
9、C# 创建DataTable并添加行和列
10、Linq的交并集
交集:Intersect
并集:Union
差集:Except
11、sql查询表字段说明
SELECT t.[name] AS 表名,c.[name] AS 字段名,cast(ep.[value] as varchar(100)) AS [字段说明] FROMsys.tables AS t INNERJOIN sys.columns ASc ON t.object_id = c.object_id LEFTJOIN sys.extended_properties AS ep ONep.major_id = c.object_id AND ep.minor_id = c.column_id WHERE ep.class =1 AND t.name='TimerService'--------表名
12、C#异常处理,怎样将异常抛到上一层
问题:例如有两个层,逻辑层,数据层。数据层里发生异常,按以下写法程序会直接断掉,没办法抛到上一层。
异常监控:
try{} catch(Exception ex){ throw ex; }
正确写法是:
try{} catch(Exception ex){ throw new Exeption(ex.message) }
一个项目只要一个异常处理的地方即可(个别特殊的地方个别处理),也就是说所有的异常都在最顶层的某个地方处理,
而程序中不用关心异常处理,只要在可能出现异常的地方抛出即可。
13、C# 生成1到100整数数组的快捷方法
数组:Enumerable.Range(1, 100).ToArray();
List:Enumerable.Range(1, 100).ToList();
14、C# 获取1000到9999之间的随机数
newRandom().Next(1000, 9999)
15、C# 获取当前方法名
System.Reflection.MethodBase.GetCurrentMethod().Name
16、Json对象和字符串互相转化
首先项目需要引用Newtonsoft.Json.dll 程序集
2.1)JSON对象转JSON字符串
string str =JsonConvert.SerializeObject(需要转换的json对象);
2.2) JSON字符串转JSON对象
var t =JsonConvert.DeserializeObject(需要转换的字符串);
17、在cmd下用cd命令进不了D盘/进入带空格目录报错的问题
问题1、今天遇到了一个,cmd中使用cd不能进入到自己想进的目录问题:cdd:如下图
即使进入了,也会在下一段跳出F目录。
解决办法:增加一个/d——cd /d d:
如下图,我不仅可以进入d盘符下,还可以访问盘符下的文件夹
问题2、window命令行进入 带空格目录会报错
解决方法:
用英文的双引号把带空格的目录包起来——cd C:\"ProgramFiles"\Google\Chrome\Application
这样就可以进入了
18、VS快捷键
(1)自动生成{get;set;}:输入prop,两下Tab——》直接输入数据类型,之后两下Tab输入属性名
(2)整段添加#region:选中注释内容(可忽略),ctrl+K、S,选择region
(3)智能提示:ctrl+J
(4)方法参数提示:ctrl+shift+空格
(5)打cw,两下tab,快速生成console.WriteLine();
19、Foreach一个简单问题
要求计算出list最后的值:
var list = new List<Int32>() { 1, 2, 3, 4, 5 }; list.ForEach(element => element++); // 正确答案:123456
考察重点:(1)值类型&引用类型区别 (2)Foreach原理
关于Foreach有一个定义很重要:
The foreach statement is a wrapper around the enumerator,which only allows reading from,not writing to,the collection.
// foreach语句是枚举器的包装器,它只允许读取集合,而不允许写入集合。
试验以下,同样使用foreach,new一个对象List
var list = new List<DemoDto>() { new DemoDto { Id = 1, Name = "AA" }, new DemoDto { Id = 2, Name = "BB" } }; list.ForEach(element => { element = new DemoDto { Id = 4, Name = element.Name }; // 对象内容没变化:[{"id":1,"name":"AA"},{"id":2,"name":"BB"}] element.Name += "test"; // 对象内容有变化:[{"id":1,"name":"AAtest"},{"id":2,"name":"BBtest"}] });