C#学习笔记--1
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();
{
console.writeline("");
}
}
//对于方法的调用是先实例化,然后再进行调用:
Mod mod=new Mod();//实例化。
mod.defaultMethod();//调用过程。
两个类要能够相互可见的话可以将这两个 类放在同一个命名空间下面。
类专用修饰符:
sealed:不能被继承的类;
partial:能声明在不同的文件中的类。
类型的转换:
隐式转换:
显式转换:
代码:、
class conversions
{
static void main()
{
int a=4;//system.int32
long b;//system.int64
b=a;//隐式转换
console.writeline(a);
}
}
可以先对于上面设置的两个变量进行初始化,然后再进行输出操作。
显式转换就是这样子的:a=(int)b;
checked和unchecked操作符和语句:
在显式转换前面加入checked操作服。
在程序中有一句话:
messagebox.show("fashengyichu")能够弹出一个对相框。
这里还有一种感觉就是:
b=b+100;
b+=100;
这个时候最开始的初始化b为byte类型,所以这两句话是有区别的,上面第一句话在操作的时候是很容易出错的,修改的方式是:在右边的表达式上加入:
b=(byte)(b+100);
这个时候跟下面那句话就保持一致了。
而下面这句话,因为在右边的是byte类型的常量,所以就十分直接的隐式转换成了byte类型了。
引用类型的转换:
CLR允许强制的转化。
Fruit f=new Apple();//直接说明了子类可以被强制转换成为自己的父类。
而要强调的是父类不能转换成任何一个子类。
要想确切的知道一个对象的类型可以调用gettype()方法。
type t=f.gettype();//*********
Apple a=(Apple)f;//类型转换的方式。
也可以在输出的语句中对于参数中的对象进行转换。
用is操作符:
console.writeline(f is fruit);
console.writeline(f is apple);
console.writeline(a is fruit);
console.writeline(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 this.controls)
{
listbox1.items.add(c.name);
control c1=c as button;
if(c1!=null)
{
c1.text="kkkkkkkkkkk";
}
}//强制类型转换的一个简单的例子。
属性:
class user
{
private string m_name;
private string m_易做图;
//
public void setname(string values)
{name=values;}
public string getname()
{
return name;
}
public void set易做图(string values)
{
if (values==""||values=="")
{
易做图=values;
}
else{
console.writeline("性别只能为“男”或“女”");
}
}
public string get易做图()
{
return 易做图;
}
public name
{
get{
return name;
}
set{
name=values;
}
public 易做图
{
get{return 易做图}
set{
[if判断语句]
}
}
}
//
}
class property
{
static void main()
{
user zs=new user();
zs.name=("张三");
zs.易做图=("男");
console.writeline("姓名:"+zs.getname+"性别:"+zs.get易做图)
zs.name="张三";
zs.易做图="男";
console.writeline("姓名:"+zs.name+"性别:"+zs.易做图)
}
属性的调用跟类的字段的调用是一模一样的。
static属性:只能访问静态的。
弹出对话框的上面就是Using system.windows.forms;
年龄属性应该根据生日生成一个动态的字段 。
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)
{
this.name=name;
}
public string name
{
get(return name;)
}
}
class test
{
static void main()
{
arrclass[] a=new arrclass[10];
a[0]=new arrclass("");
a[1]=new arrclass("");
a[2]=new arrclass("");
console.writeline("a[0]="+a[0].name);
console.writeline("a[1]="+a[1].name);
console.writeline("a[2]="+a[2].name);
}
}
要定义一个索引器就必须要this,还要加上中括号。
索引器只需要申明一个实例,而类需要声明多个实例。
哈希表:【容器】
key通常可用来快速查找。
给hashtable里面加值是通过add来进行操作的。
代码:
Class indexclass//带索引器的类。
{
private hashtable name=new hashtable();
public string this[int index]
{
get{return name[index].tostring();}
set{name.add(index,value);}
}
}
class test
{
static void main()
{
//索引器的使用。
indexclass b=new indexclass();
b[100]="zghan";
b[200]="kkkkk";
b[300]="ksldjflksdj";
console.writeline("jjjj"+b[100]);
*******//此处略去三个字!
}
}
索引器和数组的比较:
类数组的 存放 :
索引器有get访问器和set访问器。没有存放变量的地方。
索引器允许重载,
Int[] a=new int[3]
a[0]=1;
a[1]=2;
a[2]=3;//数组的存放。
class arrclass
{}
......
arrclass[]a=new arrclass[3];
a[0]=new arrclass();
a[1]=new arrclass();
a[2]=new arrclass();
//类数组的 存放。
this的关键作用:索引器只能使用this。
public int this[string aname]
{
get{
}
set{
}
}
索引器不能被声明为静态的。
代码实例:
Using system;
&nb
补充:软件开发 , C# ,