传值参数:被调用后并不会更改变量值,改变的是方法中传去的变量值副本,仅影响方法中的参数值,不影响变量本身的值
变量以及参数指向的是地址,方法调用后参数中重新指向新对象地址,将原来引用的变量对象地址丢弃,重新创建新对象地址
getHashcode方法,获取内存中的对象的hash值,任何类型的变量都有这个方法,因为这个方法是从object中派生出来的
方法中不创建新对象,会更改变量的值:使用中不常见,side-effect副作用,方法主要输出还是靠返回值,一般不会轻易改变变量
ref声明故意使用副作用,改变变量值
tryparse:解析是否成功
- 什么情况下使用静态方法?
判断这个很简单,就是从内存的优化方面去考虑.因为静态和非静态的不同的地方,就是静态的从程序一启动就会一直占用内存,而非静态的只在使用后(实例化)后才会占用内存.但是每实例化个一个对象时又会另外占用内存. 举个例子,比如说一个数据库的连接字段(STRING).因为要经常使用到它,这时我们可以用STATIC.但是如果这时用非静态的话那就不合算了,因为每次调用到它时,又实例化一次.这样相比来说占用内存就比较大了.不划算. 像一个登录后台的方法,你只在登陆时候调用一次,就没有必要做成静态的了.那样一直驻存在内存中.在大型项目中,你如果都使用静态的那得要多少内存去支撑呀.简单点,就是它经常要被调用时,就用静态的.相反则用非静态的.那也就是说,公共方法就设置为静态的方法。
静态类中所有变量以及子类都应该是静态,并且无法实例化静态类
C#关键字static如何使用,在什么情况下使用?_c#中static的作用和用法-CSDN博客
class StudentFactory
{
//静态方法根据输入参数实例化对象,并通过输出参数交还创建好的对象
public static bool Create(string stuName,int stuAge,out Student result) {
result = null;
if(string.IsNullOrEmpty(stuName))
{
return false;
}
if (stuAge>80||stuAge<20)
{
return false;
}
result = new Student()
{
Age = stuAge,
Name = stuName
};
return true;
}
}
在静态方法中,你不能使用this关键字,因为this关键字代表当前类的一个实例,而静态方法不与任何类的实例相关联。你也不能访问类的非静态字段和属性。这是因为非静态字段和属性都是和类的实例相关联的,而静态方法不是。但是,你可以在静态方法中创建和使用其他类的实例。在你提供的代码中,提到的"create a new Student object",这是完全合法的。静态方法可以创建新的对象,并且可以访问那个类的(非静态或静态)方法和属性,只要那个类的实例被传入静态方法中。所以,静态方法不能访问他们所在类的实例状态(非静态字段和属性),但是它们可以创建和操纵其他类的实例。
cw有很多重载,会声明一个数组对象,将x,y,z放入该数组对象中去
params只能有一个且必须是最后一个
只是调用方法
/// <summary>
/// 可选参数,在声明时具有调用值
/// </summary>
/// <param name="name"></param>
/// <param name="age"></param>
static void PrintInfoDefault(string name="张三",int age=9)
{
Console.WriteLine("Hello {0},you are {1}", name, age);
}
扩展方法必须在顶级静态类上定义,不能在嵌套类中定义扩展方法。能够为指定数据类型添加拓展方法。
/// <summary>
/// 拓展方法
/// 扩展方法必须在顶级静态类上定义,不能在嵌套类中定义扩展方法。和program类平级,且方法必须是静态,公共的
/// this必须是形参列表中的第一个
/// </summary>
static class DoubleExtension
{
public static double Round(this double input, int digits)
{
double result = Math.Round(input, digits);
return result;
}
}
linq方法
foreach循环和for循环有什么区别和优缺点呢?下面简单总结一下:
foreach循环 for循环
只能用于遍历; 可以用于任何形式的重复行为;
不能更改循环目标; 在循环体中,可以进行任何操作;
遍历速度快,执行效率高。 遍历速度慢,执行效率低 。
//LinQ
List<int> list = new List<int>() { 11,12,13,14 };
//All是一个拓展方法,隶属于Enumerable静态类,等效下面的于AllGreaterThanTen()方法
bool LinqResult = list.All(x => x > 10);