finalize方法:终结器
实现了终接器会大大的降低程序的性能
释放模式:【非托管资源释放】
手动释放{dispose()方法或者close()方法True非托管资源释放或者是托管资源释放【我们的类包含了其他 类这个时候我么就可以在这里对其进行释放而一般情况下托管资源是被垃圾回收站回收的】}阻止finalize的调用
自动释放(finalize()方法false非托管资源释放)
public class myresource:IDisposable
{
private bool disposed=false;
public void dispose()
{
}
public void close()
{
}
~myresource()
{
}
private void dispose(bool disposing)
{
判断句//
}
}
类的修饰符:
访问控制修饰符;[包括了:default;public;private;internal;protected;protected internal]
Class mod
{
void defaultMethod();
{
consolewriteline();
}
}
//对于方法的调用是先实例化然后再进行调用:
Mod mod=new Mod();//实例化
moddefaultMethod();//调用过程
两个类要能够相互可见的话可以将这两个 类放在同一个命名空间下面
类专用修饰符:
sealed:不能被继承的类;
partial:能声明在不同的文件中的类
类型的转换:
隐式转换:
显式转换:
代码:
class conversions
{
static void main()
{
int a=;//systemint
long b;//systemint
b=a;//隐式转换
consolewriteline(a);
}
}
可以先对于上面设置的两个变量进行初始化然后再进行输出操作
显式转换就是这样子的:a=(int)b;
checked和unchecked操作符和语句:
在显式转换前面加入checked操作服
在程序中有一句话:
messageboxshow(fashengyichu)能够弹出一个对相框
这里还有一种感觉就是:
b=b+;
b+=;
这个时候最开始的初始化b为byte类型所以这两句话是有区别的上面第一句话在操作的时候是很容易出错的修改的方式是:在右边的表达式上加入:
b=(byte)(b+);
这个时候跟下面那句话就保持一致了
而下面这句话因为在右边的是byte类型的常量所以就十分直接的隐式转换成了byte类型了
引用类型的转换:
CLR允许强制的转化
Fruit f=new Apple();//直接说明了子类可以被强制转换成为自己的父类
而要强调的是父类不能转换成任何一个子类
要想确切的知道一个对象的类型可以调用gettype()方法
type t=fgettype();//*********
Apple a=(Apple)f;//类型转换的方式
也可以在输出的语句中对于参数中的对象进行转换
用is操作符:
consolewriteline(f is fruit);
consolewriteline(f is apple);
consolewriteline(a is fruit);
consolewriteline(a is apple);
运行的结果是:
True;
false;
true;
true;
这里我们知道了在使用is操作符的时候只会打印输出bool值也就是true和false
as的意义:比方说:apple a=f as apple;//这里说明的是如果f兼容与apple那么a的返回值就是true反之就是false这样下面的判断语句就会用判断表达式:a!=NULL
foreach循环 ??????
controls属性表示的是返回值是一个集合
foreach(control c in ntrols)
{
emsadd(cname);
control c=c as button;
if(c!=null)
{
ctext=kkkkkkkkkkk;
}
}//强制类型转换的一个简单的例子
属性:
class user
{
private string m_name;
private string m_sex;
//
public void setname(string values)
{name=values;}
public string getname()
{
return name;
}
public void setsex(string values)
{
if (values==||values==)
{
sex=values;
}
else{
consolewriteline(性别只能为男或女);
}
}
public string getsex()
{
return sex;
}
public name
{
get{
return name;
}
set{
name=values;
}
public sex
{
get{return sex}
set{
[if判断语句]
}
}
}
//
}
class property
{
static void main()
{
user zs=new user();
zsname=(张三);
zssex=(男);
consolewriteline(姓名:+zsgetname+性别:+zsgetsex)
zsname=张三;
zssex=男;
consolewriteline(姓名:+zsname+性别:+zssex)
}
属性的调用跟类的字段的调用是一模一样的
static属性:只能访问静态的
弹出对话框的上面就是Using systemwindowsforms;
年龄属性应该根据生日生成一个动态的字段
private static int m_logincount;
public user()
{m_logincount++;}
public static int logincount
{get
{
return m_logincount;
}
}//只读属性
索引器:
类似于属性索引器被称为 有参属性
class arrclass
{
private readonly string name;
public arrclass(string name)
{
thisname=name;
}
public string name
{
get(return name;)
}
}
class test
{
static void main()
{
arrclass[] a=new arrclass[];
a[]=new arrclass();
a[]=new arrclass();
a[]=new arrclass();
consolewriteline(a[]=+a[]name);
consolewriteline(a[]=+a[]name);
consolewriteline(a[]=+a[]name);
}
}
要定义一个索引器就必须要this还要加上中括号
索引器只需要申明一个实例而类需要声明多个实例
哈希表:【容器】
key通常可用来快速查找
给hashtable里面加值是通过add来进行操作的
代码:
Class indexclass//带索引器的类
{
private hashtable name=new hashtable();
public string this[int index]
{
get{return name[index]tostring();}
set{nameadd(indexvalue);}
}
}
class test
{
static void main()
{
//索引器的使用
indexclass b=new indexclass();
b[]=zghan;
b[]=kkkkk;
b[]=ksldjflksdj;
consolewriteline(jjjj+b[]);
*******//此处略去三个字!
}
}
索引器和数组的比较:
类数组的 存放 :
索引器有get访问器和set访问器没有存放变量的地方
索引器允许重载
Int[] a=new int[]
a[]=;
a[]=;
a[]=;//数组的存放
class arrclass
{}
arrclass[]a=new arrclass[];
a[]=new arrclass();
a[]=new arrclass();
a[]=new arrclass();
//类数组的 存放
this的关键作用:索引器只能使用this
public int this[string aname]
{
get{
}
set{
}
}
索引器不能被声明为静态的
代码实例:
Using system;
using systemcollections;
//姓名课程id成绩
class coursescore
{
private string name;
private int courseid;
private int score;
public coursescore(string nameint courseidint score)
{
thisname=name;
useid=couseid;
thisscore=score;
}
public string name
{
get{}
set{}
}
}
class coursescoreindexer
{
private arraylist arrcoursescore;
public couresescoreindexer()
{
arrcoursescore=new arraylist();
}
public int this[string nameint courseid]
{
get
{
foreach(coursescore cs in arrcoursescore)
{
if (csname==name$$urseid==courseid)
{
return csscore;
}
}
return ;
}
set
{
arrcoursescoreadd(new coursescore(namecourseidvalue))
}
}
public arraylist this[string name]
{
get{}
}
}
class Test
{
static void main()
{
coursescoreindexer csi=new coursescoreindexer();
csi[]=;
consolewriteline(csi[]);
consolewroteline(chengjiwei:)
}
}
现在将的是C#程序语言的规范:
bitarray类;
可以存放任何长度的
左移相当于乘以;右移相当于除以
索引器的返回值是bool值所以在实现的时候最开始的一句话是:
public bool this[int index]
{}
>>符号表示的是往右移动位数;
<<符号表示的是往左移动位数;
&运算符:都是的情况下才会最终的结果是
~运算符在C#中是按位求补的操作【:;:】
如何使用bitarrary类: