C#的面向对象
来源:互联网 发布:java毫秒转换成date 编辑:程序博客网 时间:2024/05/21 07:14
对象包含:成员、属性、方法(对象的行为)
C#实例化对象并访问对象成员
C# 方法默认访问级别 : private
C# 类默认访问级别 : internal
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace kids{ class Program { static void Main(string[] args) { Child xiaoming = new Child();//实例化了child类的对象 xiaoming.name = "马晓明";//为字段赋值 xiaoming.sex = "男"; xiaoming.age = 6; Console.WriteLine("我叫" + xiaoming.name + ",今年" + xiaoming.age + "岁;"); xiaoming.PlayBall();//调用踢球的方法 Console.ReadKey();//调试防止闪退 } } /// <summary> /// C# 方法默认访问级别 : private /// C# 类默认访问级别 : internal /// </summary> public class Child { public string name;//public 访问修饰符公共的,private私有的,默认的访问修饰符。(不可被外部类访问) public string sex; public int age; public void PlayBall() { Console.WriteLine("吼啊"); } }}
属性的封装
封装就是隐藏对象的信息,留出访问的接口。在C#中,我们常使用属性对字段进行封装。
private string _sex;//隐藏的字段public string Sex//公开的属性{ //get、set访问器 get//只读 { return _sex; } set//只写 { _sex=value;} }
封装示例代码:
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace kids{ class Program { static void Main(string[] args) { Child xiaoming = new Child();//实例化了child类的对象 xiaoming.Name = "马晓明";//为字段赋值 xiaoming.Sex = "男"; xiaoming.Age = 6; xiaoming.Age = 65; Console.WriteLine("我叫" + xiaoming.Name + ",今年" + xiaoming.Age + "岁;"); xiaoming.PlayBall();//调用踢球的方法 Console.ReadKey();//调试防止闪退 } } /// <summary> /// C# 方法默认访问级别 : private /// C# 类默认访问级别 : internal /// </summary> public class Child { private string name;//public 访问修饰符公共的,private私有的,默认的访问修饰符。(不可被外部类访问) private string sex; private int age; //封装的快捷键:ctrl + R +E public string Name { get { return name;//读访问器 } set { name = value;//写访问器 } } public string Sex { get { return sex; } set { sex = value; } } public int Age { get { return age; } set { //set块约束属性赋值,只有满足条件3-7岁的可以被赋值 if (value >= 3 && value <= 7) { age = value; } } } public void PlayBall() { Console.WriteLine("吼啊"); } }}
方法的重载
方法的重载,同一个类中,多个方法,名字相同,参数不同,可以是参数类型不同也可以数量不同,但至少有一方面不同
public void EatSugar(string sugar){}public void EatSugar(int count){}
参考链接:http://www.jb51.net/article/36735.htm
return 的使用’
定义方法时,每一个参数必须单独申明。
比如,可是是int n1,int n2 但不能是int n1,n2
尽量让每个方法只完成一个功能,避免限制。
return 可以有返回值,方法的类型根据返回值类型设置。
class ReturnTest { static double CalculateArea(int r) //方法的类型必须与返回值类型相同 { double area = r * r * Math.PI; return area;//返回值类型为double } static void Main() { int radius = 5; double result = CalculateArea(radius); Console.WriteLine("The area is {0:0.00}", result); }}// Output: The area is 78.54
C#构造方法
1、构造方法的作用:为属性赋值。
2、如果没有显示定义的构造方法,则会有一个默认的无参数的构造方法。
3、如果显示定义了构造方法,则没有默认的构造方法。
4、只能用new 方法名()的形式调用构造方法。
5、构造方法通常声明为public。
6、构造方法没有返回值。
7、构造方法名必须与类名相同。
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication1{ class Program { static void Main(string[] args) { a a1 = new a("1"); Console.ReadKey(); } } class a { public a(string str)//定义一个构造方法 { Console.Write(str); } }}
参考链接:http://www.cnblogs.com/yangfengwu/p/5864625.html
this的使用
this:当前对象,可调用当前的字段、属性、方法
参考资料链接:http://www.oschina.net/code/snippet_584165_48374
构造函数的重载
class Person { public Person(string name, int age) { this.Name = name; this.Age = age; } public Person(string name, int age, char sex) //构造函数的重载 { this.Sex = sex; } public Person() //构造函数的重载 { } }
对象初始化器初始化对象
//对象初始化器初始化对象
Child child3 = new Child(){Name = "周润发",Age = 5};
此处()可以省略
C#值类型和引用类型
C#结构
参考链接:http://www.cnblogs.com/jiajiayuan/archive/2011/09/20/2181582.html
结构Struct
1、结构是值类型,类是引用类型(两者的根本区别)
2、结构中可以定义字段、属性和方法
3、不能为结构中的字段赋初始值
4、结构的构造方法中必须为所有字段赋值
5、不能为结构显式定义无参数的构造方法
6、结构类型的对象可以不实例化,就直接使用(可以不new,直接使用)
struct A { public int x; //不能直接对其进行赋值 public int y; public static string str = null; //静态变量可以初始化 public A(int x,int y) ; //带参数的构造函数 { this.x = x; this.y = y; Console.WriteLine("x={0},y={1},str={2}", x, y,str); } } class Program { static void Main(string[] args) { A a =new A(1,2); A a1 = a; a.x =10; Console.WriteLine("a1.x={0}",a1.x); Console.Read(); } }
枚举
1.枚举是值类型
2.枚举中不能定义字段属性和方法
3.枚举值是从0递增的整数
(可以将数字强制转换为枚举类型:(枚举变量)0 …)
public class EnumTest{ enum Days { Sun, Mon, Tue, Wed, Thu, Fri, Sat }; static void Main() { int x = (int)Days.Sun; int y = (int)Days.Fri; int z = (Days).6; Console.WriteLine("Sun = {0}", x); Console.WriteLine("Fri = {0}", y); }}/* Output: Sun = 0 Fri = 5*/
方法传参中的值类型和引用类型
按引用传参:
1)传递类就是引用传参
方法改变形参,通常实参也会被改变
2)ref关键字可以使值类型参数按引用传参
注意:声明、调用的时候,都要加“ref”关键字,
而且实参中“ref”后面不能直接使用属性,应该赋值给一个变量,用变量来传参。(值类型,引用方式传参)
按值传参:
方法改变形参,通常实参不会被改变
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace kids{ class Program { static void Main(string[] args) { int age = 3; Growth(ref age); Console.WriteLine("我现在{0}岁了" ,age); Console.ReadKey();//调试防止闪退 } static void Growth(ref int age)//值类型参数,按引用传参 { age++; } }}
out关键字用法
1、ref用于传参,out用于获取方法的计算结果
2、return只能返回一个值,out可以返回多个值
3、out修饰的形参必须赋值
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace kids{ class Program { static void Main(string[] args) { int age = 3; //Growth(ref age); Console.WriteLine("我现在{0}岁了" ,age); int lastAge, nextAge; Growth(age,out lastAge,out nextAge); Console.WriteLine("我明年{0}岁,我去年{1}岁",nextAge,lastAge); Console.ReadKey();//调试防止闪退 } static void Growth(ref int age)//值类型参数,按引用传参 { age++; } /// <summary> /// /// </summary> /// <param name="age"></param> /// <param name="lastAge">去年的年龄</param> /// <param name="nextAge">明年的年龄</param> static void Growth(int age,out int lastAge,out int nextAge) { lastAge = age - 1; nextAge = age + 1; } }}
- C#的面向对象
- C# 面向对象的基本原则
- C#面向对象的思想
- C# 面向对象的思想
- C#面向对象的笔记
- C#面向对象的基础
- C#面向对象的概念
- c# 面向对象的语言
- c#面向对象(一)----面向对象的概念
- 求一些C#面向对象的练习题
- C#之面向对象的概述
- C#中面向对象的OOP概念
- 学习C#030428面向对象的程序设计
- C#面向对象的卓越设计
- C#之面向对象的特性
- 面向对象,结合C#的初次总结
- C#面向对象常见的变量区分
- c#之面向对象的个人理解
- 1. Two Sum
- jsp c:if 的使用
- Linux命令之chmod
- jquery的$().each,$.each的区别
- GitHub创建SSH Keys
- C#的面向对象
- select下拉框的数据方式
- C++ 泛型
- easyui递归添加完所有的菜单及菜单所拥有的按钮,并根据数据库的值判断是否勾上
- 高仿微信摇一摇,动画效果为左右晃动
- LeetCode学习篇十七——Best Time to Buy and Sell Stock II
- linux进程通信——信号量
- ISO的七层模型是什么?tcp/udp是属于哪一层?tcp/udp有何优缺点?
- 2016年11月3日学习总结