之前学习只求理解,从来不记这些专业词汇,对代码也没有优化的想法。现在就回来补课来了TAT
目录
2.property和parameter和attribute的区别?
1.Field 字段是什么?什么是引用字段?
引用字段区别于值字段,就是类似指针的字段呗,动态分配内存之类的。
public class Sample
{
int m_field;//这个就是字段
int p_field = new int();//这个可能就是引用字段
}
值类型:
byte,short,int,long,float,double,decimal,char,bool 和 struct 统称为值类型。结构和枚举。
引用类型:
string 和 class统称为引用类型。
- 值类型的实例通常是在线程栈上分配的(静态分配),但是在某些情形下可以存储在堆中。
- 引用类型的对象总是在进程堆中分配(动态分配)。
2.property和parameter和attribute的区别?
property
就是类里为private和protected变量提供接口的那个,get;set;。
可以看成是一种对数据的封装。
C#3.0引入了Auto-Implemented Properties机制。
为什么使用属性?
要求字段只能读或者写。
要求限制字段的取值范围。
在改变一个字段的值的时候希望改变对象的其他一些状态。
parameter
参数有四种类型,值参数,引用参数,输出参数和数组型参数。
值参数:值拷贝的形式,在方法中更改不会保留更改的值(局部变量)。
引用参数:保留更改的值的。
输出参数:在方法中进行初始化的参数。
数组型参数:把输入的数值按照规则传入一个新建的数组中。
public class Sample
{
int m_field;//这个就是字段
public int field//这个是属性,property
{
get;set;
}
static void Function(ParaType ptr1,ref ParaType ptr2,out ParaType ptr3)
{
//ptr1就是值参数
//ptr2就是引用参数
//ptr3就是输出参数
}
static void FunctionParam(Params object[] ptr4)
{
//ptr4就是数组型参数
}
}
static void main()
{
int i,j,k;
i=j=0;//这两种需要先进行初始化,out的可以不用
Function(i,ref j,out k);
FunctionParam("a","b","c");
}
attribute
https://blog.csdn.net/xiaouncle/article/details/70216951
https://blog.csdn.net/xiaouncle/article/details/70229119
attribute可以理解成自定义修饰符。浅显的理解,大概是类似于一个给类或变量或者属性啊什么一个标签,用来给看/调试代码的人区分这些东西,便于维护整理调试代码。如果后面用到了会回来补充。
我看不懂,我人傻了。= =
3.修饰符和标识符和关键字的区别?
修饰符
修饰符都属于关键字。修饰符是指用于声明的那些关键字。(public那些)
https://docs.microsoft.com/zh-cn/previous-versions/6tcf2h8w%28v%3dvs.120%29
标识符
写代码时自己起的那些名字。
关键字
https://docs.microsoft.com/zh-cn/previous-versions/x53a06bb(v=vs.120)
关键字是指不能被用作标识符的已经预定义了的标识符。(if啊等等一切)
4.事件是什么?事件处理函数是什么?事件参数是什么?
事件就理解成用户的一个操作。
事件处理函数就是处理事件的函数,用于处理用户操作的。实现线程间通信的。
以后用到事件了再回来补充。
5.as怎么使用?
as是用来进行强制类型转换的。我感觉用在子类基类之间?
Type1 a = new Type2();
Type2 newValue = (Type2)a;//不安全的强制类型转换
Type1 a = new Type2();
Type2 newValue = a as Type2;//安全,不成功会返回NULL
------以下是错误用法------
Type1 a = new Type1();
Type2 newValue = a as Type2;//不能进行类型之间的转化,需要强制转换
Type1 a = 11;
Type2 newValue = a as Type2;//值类型不能使用
强制转换就配合is使用,具体的就不写了。
6.对象生存期是?
静态生存期:与程序运行期相同。
动态生存期:诞生于声明点,结束于块结束时。
把不再引用的字段设置为NULL便于回收内存。
7.Struct和Class怎么选择?
https://docs.microsoft.com/en-us/dotnet/standard/design-guidelines/choosing-between-class-and-struct
- 在大多数的情况下,都应该选择类,除非满足以下情况,才考虑选择结构体:
- 类型具有基元类型的行为
- 类型不需要从其它任何类型继承
- 类型也不会派生出任何其它类型
- 类型的实例较小(约为16字节或者更小)
- 类型的实例较大,但是不作为方法的参数传递,也不作为方法的返回值。
8.非托管资源是指什么?
“非托管资源:就是非.NET平台框架的资源,比如,连接数据库,操作Office等.NET里的平台互操作都是非托管资源。这些资源用完都要立即释放掉的。”
9.装箱、拆箱是什么?
装箱:把值类型转换成引用类型。
拆箱:把引用类型转换成值类型。
int i=0;
System.Object obj=i;
Console.WriteLine(i+","+(int)obj);
https://www.cnblogs.com/zjtao/p/11345442.html
上面的代码,三次装箱,一次拆箱。
对性能的影响?
引用类型增加会增加托管堆的压力、垃圾回收的次数。
值类型过多会有损应用程序的性能。
所以大对象避免使用值类型。
装箱操作会对应用程序产生消耗。
避免过多的装箱操作。
性能这块也弄不太明白。
10.方法重载和默认参数?
默认参数就是在方法中给了默认值的参数。
所以如果不想使用默认参数,就重载两个方法,一个包含该参数,一个不包含。
11.值语义、值类型、基类型?
https://www.cnblogs.com/ly8838/p/3929025.html
https://blog.csdn.net/weixin_41143631/article/details/87710751
值语义是指对象的拷贝与原对象无关,可以彼此独立改变互不影响。
值类型:第一个问题里有提及,感觉就是是值语义的类型就是值类型。
基元类型:编译器直接支持的类型。
https://www.cnblogs.com/ASPNET2008/archive/2009/06/14/1503041.html
https://www.cnblogs.com/ITusk/p/7105148.html
12.类的逻辑数据成员是指什么?
逻辑数据成员就是类的逻辑属性。比如欧盟-国家这样的。
13.方法和属性怎么选择?
问题2里有。个人理解就是属性是为了改变类里面的私有字段,方法是针对整个类的操作。
14.构造器?
就是构造函数。
15.替换签名是什么?
不知道,没查到。
剩下的部分
异常、事件、委托、事件处理器、Stringbuilder与String、强类型、硬编码、语义不同的值、域、空引用