黑马程序员 自学18C#面向对象之访问修饰符与属性
2014-05-07 23:45
375 查看
-------
ASP.Net+Unity开发、.Net培训、期待与您交流! -------
在C#中有四个访问修饰符:
public: 可以在任何地方被访问。
Internal: 只能在本项目中被访问。
Private: 只能在本类中被访问。
Protected: 只能在本类和子类中被访问。
在类中(类中,方法外,包括方法)定义变量/方法时,没有写访问修饰符,那么默认的访问修饰符为private。
在类这个级别(命名空间中,类外,包括类)不写访问修饰符,直接定义变量/类,默认为internal。
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 →字段
{
……Main()
{
Person zsPerson = new Person();
zsPerson.Age=18;
intaaa=zsPerson.Age; 自动调用get方法
}
}
1. get
{ returnage; }
通过return返回其他类中要取用的age。
允许外部访问的变量一定要声明为属性。
鼠标放到要保护的字段(age)右键→重构→封装→确定→确定。
自动将age→private并生成publicAge{get;set;}
ctrl+R+E
zsPerson.Age=19;
int aaa =zsPerson.Age;
读→ get 只读属性 eg:身份证号,姓名,性别
写→ set 只写属性 eg:密码创建
只有get属性称为只读属性,这个属性只能读取,不能写入;
只有set属性 只写 写入 读取。
private: 私人
internal: 内部
protected:保护
-------
ASP.Net+Unity开发、.Net培训、期待与您交流! -------
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培训、期待与您交流! -------
相关文章推荐
- 黑马程序员 C#中使用访问修饰符来修饰属性
- 黑马程序员_C#面向对象(概念,访问级别,属性)
- C#中如何使用访问修饰符来修饰属性
- 【C#基础】之访问修饰符、类与属性、类与结构的简单介绍
- 黑马程序员_C#各种元素的访问修饰符的默认值
- c# 属性的访问修饰符
- .Net学习 第2季08 C#面向对象 访问修饰符 序列化/反序列化 部分类 密封类
- 黑马程序员———面向对象之包、访问修饰符、内部类
- 黑马程序员 自学19C#面向对象之构造方法
- 黑马程序员——类,访问修饰符,属性,构造方法,命名空间,类图,params
- C# 方法和属性的访问权限修饰符解析
- 黑马程序员:C#中的属性和修饰符
- C#基础知识复习1代码规范-执行流程(c#)-面向对象-引用命名空间-封装-继承-访问修饰符-虚方法-静态成员-多态-抽象类等
- C# 方法、方法参数和返回值、属性 、索引器 、访问修饰符
- 黑马程序员------类访问修饰符属性
- 基础_C# 方法、方法参数和返回值、属性 、索引器 、访问修饰符 访问修饰符
- 黑马程序员_对象、类、属性、访问修饰符
- 【译文】 C#面向对象的基本概念 (Basic C# OOP Concept) 第一部分(类,对象,变量,方法,访问修饰符)
- 黑马程序员—C#访问修饰符 public、private、protected 和 internal
- C#里4个访问权限修饰符