您的位置:首页 > 职场人生

黑马程序员 自学18C#面向对象之访问修饰符与属性

2014-05-07 23:45 375 查看
-------
ASP.Net+Unity开发、.Net培训、期待与您交流! -------


访问修饰符

2014/4/16

在C#中有四个访问修饰符:

public: 可以在任何地方被访问。

Internal: 只能在本项目中被访问。

Private: 只能在本类中被访问。

Protected: 只能在本类和子类中被访问。

在类中(类中,方法外,包括方法)定义变量/方法时,没有写访问修饰符,那么默认的访问修饰符为private。

在类这个级别(命名空间中,类外,包括类)不写访问修饰符,直接定义变量/类,默认为internal。

限制赋值

如果限制用户对对象实例化的赋值,Java是这样做的:

class Person

{……

private int age;

}

public void SetAge(int setAge)

{

If(setAge>=0)

{ age=setAge;}

else

age=0;

}

class Program

{……

Main()

{

Person p = new Person();

p.SetAge(-18);

……

}

}

Java:这样来限制用户输入,将字段私人化,再将该字段的方法公开调用,这样在该字段赋值时就调用其方法检测值。

.Net中:

class Person

{

public char sex;

privateint age;

public int Age; 定义一个变量,在这个变量中含有get,set两个方法,我们称这个变量为属性

{

get

{

取值时调用 1.

}

set

{

赋值时调用 2.

}

}

class Program

{

……

Person zsPerson= new Person();

zsPerson.Age=18; 默认调用了Person类中set方法

}

2.set

{//有关键字,value 就是存储用户赋的那个值

if(value>=0)

{age=value;} value 获取用户输入的值

else

{ age=0; }

}

Age→属性

sex age name →字段

取值

class Program

{

……Main()

{

Person zsPerson = new Person();

zsPerson.Age=18;

intaaa=zsPerson.Age; 自动调用get方法

}

}

1. get

{ returnage; }

通过return返回其他类中要取用的age。

属性:

定义一个public的具有get,set方法的变量(Age),这个变量是用于保护一个私有变量age。

允许外部访问的变量一定要声明为属性。

鼠标放到要保护的字段(age)右键→重构→封装→确定→确定。

自动将age→private并生成publicAge{get;set;}

ctrl+R+E

读写属性:

具有get+set方法的属性为读写属性

zsPerson.Age=19;

int aaa =zsPerson.Age;

读→ get 只读属性 eg:身份证号,姓名,性别

写→ set 只写属性 eg:密码创建

只有get属性称为只读属性,这个属性只能读取,不能写入;

只有set属性 只写 写入 读取。

词汇小结:

public: 公共

private: 私人

internal: 内部

protected:保护

练习:

class Program
{
static void Main(string[] args)
{
//若想用其他类中的属性和方法需要先实例化出一个对象
Student zhangSan = new Student();
Student xiaoLan = new Student();
//赋值需要对该实例化的 对象.属性 赋值
zhangSan.Age = 18;
zhangSan.Name = "张三";
zhangSan.Sex = '男';
zhangSan.Language = 90;
zhangSan.Math = 95;
zhangSan.English = 80;
//声明其他类中的方法时需要用实例化的 对象.方法名();
zhangSan.SayHello();
zhangSan.Result();

xiaoLan.Age = 16;
xiaoLan.Name = "小兰";
xiaoLan.Sex = '女';
xiaoLan.Language = 95;
xiaoLan.Math = 85;
xiaoLan.English = 100;
xiaoLan.SayHello();
xiaoLan.Result();
//没有实例化的对象也可以指向对象,并且可以调用方法,属性。
Person p1 = new Person(20);
Person p2;
p2 = p1;
p2.Age++;
Console.WriteLine(p1.Age);
Console.WriteLine(p2.Age);
Console.ReadKey();
}
}
class Person
{
// private int age;
public Person(int age)
{
this.Age = age;
}
public int Age { get; set; }

}

class Student
{
//下面定义这个类中的字段,注意是private的
private string name;
private char sex;
private int age;
private double language, math, english;

//下面是对上面字段的一个封装,public的,使其他类中访问的是该属性而不是上面的字段
//注意配合三元表达式使用
public string Name
{
get
{
return name;
}
set
{
int re;
char result;
if (int.TryParse(value, out re)||char.TryParse(value,out result))
{
name = " name Error!";
Console.WriteLine(name);
}
else
{
name=value;
Console.WriteLine("你的名字为:"+name);
}
}
}
public char Sex
{
get { return sex; }
set
{
if (value=='男'||value=='女')
sex = value;
else
{
sex = ' ';
Console.WriteLine("sex Error!");
}
}
}
public int Age
{
get { return age; }
set
{
//age=value>=0?value:0;
if (value>=0)
age = value;
else
{
age=0;
Console.WriteLine("age Error!");
}
}
}
public double Language
{
get { return language; }
set
{
//languge=value>=0?value:0;
if (value >= 0)
language = value;
else
{
language = 0;
Console.WriteLine("Error!");
}
}
}
public double Math
{
get { return math; }
set
{
//math=value>=0?value:0;
if (value >= 0)
math = value;
else
{
language = 0;
Console.WriteLine("Error!");
}
}
}
public double English
{
get { return english; }
set
{
//english=value>=0?value:0;
if (value >= 0)
english = value;
else
{
english = 0;
Console.WriteLine("Error!");
}
}
}

/// <summary>
/// 下面是打招呼的方法
/// </summary>
public void SayHello()
{//这里没有特殊情况一般用小写。
Console.WriteLine("我叫{0},今年{1}岁了,是{2}同学。",name,age,sex);
}

/// <summary>
/// 下面是对成绩进行计算并显示的方法
/// </summary>
public void Result()
{
double sum = language + math + english;
double average = sum / 3;
Console.WriteLine(@"我叫{0},这次考试总成绩为{1},平均成绩为{2},
我的语文成绩为{3},数学成绩为{4},英语成绩为{5}",name,sum,average,language,math,english);
}
}


-------
ASP.Net+Unity开发、.Net培训、期待与您交流! -------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: