class Book
{
//内容
}
{% highlight C# linenos %}
public class Student
{
int age = 26;//字段
private string name;//字段
public string Name //属性
{
get { return name; }
set { name = value; }
}
public void SayHi() //方法
{
…
}
}
{% endhighlight %}
属性
属性的类型必须和字段一致。
get set 都有 表示读写属性;仅有get则表示只读属性;仅有set则为只写属性。在读写时,都可对其值进行判断。
在vs中,在写好的字段上,右键选择重构=》封装字段 (快捷键Ctrl+R,E),即可自动对字段封装成属性。
方法
方法是类或者对象的行为
访问修饰符 返回类型 方法名 ( 参数列表 )
{
// 方法的主体…
}
方法的重载:同一个方法名,不同的参数和返回值类型,仅仅是返回值类型不同的不能构成重载。
在定义方法时,加入了static修饰符,则表示方法为静态方法,可不通过对象而直接通过类来调用。
1. 静态方法:
* static关键字
* 使用类名调用
* 可访问静态成员
* 不可以直接访问非静态成员(可间接通过对象访问)
* 不能调用实例方法
* 调用前初始化
2. 实力方法:
* 不需要static关键字
* 使用类实例化的对象调用
* 可访问静态成员
* 可访问实例成员
* 直接访问实例方法、静态方法
* 在实例化对象时初始化
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
示例:
{% highlight C# linenos %}
class Student
{
public Student(string name, int age, string hobby)
{
this.Name = name;
this.Age = age;
this.Hobby = hobby;
}
}
{% endhighlight %}
构造函数名必须与类名一致,无返回类型,定义格式为
public 类名(参数列表)
{
//初始化成员的代码
}
定义类之后,如果不写构造函数,会自动给生成一个构造函数,参数列表为空,也不做成员的初始化,仅仅自动生成一个形式,以便我们在实例化时使用New 类名()来实例化(它自动对数值类型赋值为0,而对字符串等类型赋值为null)。当自己写了构造函数之后,就必须写完整,因为此时系统就不会再提供自动的构造函数了。
const 数据类型 常量名称=值;
{% highlight C# linenos %}
[public] enum 枚举名称
{
值1,
值2,
值3,//注意:值之间是逗号,而不是分号!
……
}
{% endhighlight %}
public :访问修饰符
enum :表示声明的是枚举类型
枚举名 一般要符合Pascal命名规范
枚举类型的使用:枚举名 变量名称=枚举名.枚举值之一:
示例:
{% highlight C# linenos %}
Pubilc enum Gender{男,女}//声明
Gender gender=Gender.男;//使用
{% endhighlight %}
在类中的使用:
示例:
{% highlight C# linenos %}
//新建一个类 单独的.cs文件
namespace PracticeClass
{
public enum Genders //定义枚举类型
{男,女}
}
//在类中调用
private Genders _gender;
internal Genders Gender
{
get { return _gender; }
set { _gender = value; }
}
{% endhighlight %}
enum 不是一种类型,它仅仅是一个定义枚举类型的关键字。通过他我们所创建的枚举的枚举名称才是一个数据类型, 或者称为类!
1>和int相互转换:
枚举转化成int 值为枚举类型的索引值(默认从0开始,可在枚举声明时设置,格式为值=索引);
int到枚举同理,会根据索引获取到枚举中对应的值,没有则不变
2>和string相互转换:
枚举转换为string 值为枚举的值。
string到枚举的转换用Enum.Parse()方法完成
示例:
{% highlight C# linenos %}
Enum.Parse(typeof(枚举名),要转换的字符串)
public enum Accp
{
S1 ,S2,Y2
}
//……
Console.WriteLine(“S2的值是{0}.”,Accp.S2.ToString());//枚举转换为字符串
(Accp)(Enum.Parse(typeof(Accp),”S2”); //字符串转换为枚举
{% endhighlight %}
可以一次性声明多个不同类型的变量
{% highlight C# linenos %}
[piblic] struct 结构名
{
public 数据类型1 名称1;
public 数据类型2 名称3;//注意:不要忽略了public,否则外部访问不到
……
public viod Show()
{
… //成员方法
}
//在这里面,这些不叫变量,而应该成为字段!变量仅仅能存取一个值,而字段可以存储多个值
//字段通常会加下划线_
}
{% endhighlight %}
{% highlight C# linenos %}
//定义
piblic struct Person
{
piblic int pId;
piblic string pName;
public Gender pGender; //用之前的枚举类型
}
//使用
Person person1;
person1.pId=1;
person1.pName=”张三”;
person1.pGender=Gender.男;
{% endhighlight %}
直接存储值,不同变量不同的存储空间
* 基本数据类型:int long float char bool
* 枚举类型:enum
* 结构类型:struct
值类型在做参数时,默认是值传值方式,如果希望被改变,需要加上ref关键字
引用类型存储的是对值的引用,对应地址
* 类:基类 System.Object 、字符串、自定义的类
* 接口:interface
* 数组
引用类型由于本来就是引用类型,在作为参数时,形参的改变会自动传递给实参(准确说,应该是在调用的时候指向了同一个地址),无需加上ref关键字
值类型到引用类型的转化称为装箱,从引用类型到值类型的叫做拆箱
示例:
{% highlight C# linenos %}
static void Main(string[] args)
{
int i = 123;
object o = i; // 装箱
i = 456; //改变i的内容
Console.WriteLine(“值类型的值为 {0}”, i);
Console.WriteLine(“引用类型的值为 {0}”, o);
}//输出结果为456 123
int i = 123;
object o = i; // 装箱
int j = (int)o; //拆箱
{% endhighlight %}
索引器的定义方式如下:
public 数据类型 this[下标类型 下标名称]
索引器的具体实现代码和属性类似,也是用get和set访问器。get访问器用于获取成员变量的值,set访问器用于为成员变量赋值。索引器的使用方式和数组类似,如果我们创建了MyClass类的对象myClass,就可以通过myClass[0]、myClass[1]、myClass[2]分别表示第1个、第2个学生、第3个学生。
* 数组属性只能根据下标(索引)来访问
* 索引器可以被重载
* 可以使用更灵活的方式访问,定义访问方式
代码示例:
{% highlight C# linenos %}
class MyClass
{
public string[] student={“zhangsan”,”lisi”,”wangwu”};
public string this[int index] //定义整型索引器
{
get
{
if (index >= 0 && index < student.Length)
{
return student[index];
}
else//如果索引超出范围
{
return student[0];
}
}
set
{
if (index >= 0 && index < student.Length)
{
student[index] = value;
}
else//如果索引超出范围
{
student[0] = value;
}
}
}
}
{% endhighlight %}