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"}]
});

 

 

 

 

 

 

 
 
 
 
posted @ 2023-04-17 10:26  暴躁老砚  阅读(104)  评论(0编辑  收藏  举报