c#中创建类(更新中)
类是最常见的一种引用类型,最简单的定义如下
class YouClassNam
{}
复杂的类可能包含一下内容
类属性 类属性以及类修饰符. 非嵌套的类修饰符有:public,internal,abstract,sealed,static, unsafe,partial
类名 各种类型参数,唯一基类,多个接口
花括号内 类成员(方法,成员属性,索引器,事件,字段,构造方法,运算符函数,嵌套类型和终止器)
1---->字段
字段是类或结构体中的变量.
字段不一定要初始化,没有初始化的字段会赋一个默认值(0,\0,null,false).字段初始化语句在构造方法之前执行
只读 字段只能在声明时或者在其所属的类构造方法中被赋值,且赋值后不能改变.
可以同事声明多个字段
class MyOne
{
static readonly int leg=8,eye=2;
string name;
public int Age=10;
}
以下修饰符可以用来修饰字段
静态修饰符 | static |
访问权限修饰符 | public internal private protected |
继承修饰符 | new |
不安全代码修饰符 | unsafe |
只读修饰符 | readonly |
跨线程访问修饰符 | volatile |
2---->方法
方法是用一组语句实现实现某个行为.
方法可以应一下修饰符修饰
静态修饰符 | static |
访问权限修饰符 | public internal private protected |
继承修饰符 | new abstract virtual override sealed |
部分方法修饰符 | partial |
非托管代码修饰符 | unsafe extern |
(1)重载方法
确保方法签名相同,就可以在类中重载方法(多方法公用同一方法名)
void Foo(int x){...}
void Foo(double x){...}
void Foo(int x,double y){...}
void Foo(double x,int y){...}
(2)值传递和引用传递
参数是值传递还是引用传递,也是方法签名的一部分.例如Foo(int)和Foo(ref int)或Foo(out int)可以同时出现在一个类中,但是Foo(ref int)和Foo(out int)不能同时出现在同一个类中
void Foo(int x){...}
void Foo(ref int x){...}//此处正确
void Foo(out int x){...}//此刻错误
3---->构造方法
构造方式是执行类或者结构体的初始化代码.
构造方法和方法定义类似,区别仅在于构造方法名和返回值只能和封装它的类相同
public class Person
{
string name; //定义字段
public Person (string n)//定义构造方法
{
name=n; //初始化字段
}
}
...
Person p=new Person("HanMei");//调用构造方法
构造方法支持以下修饰符
访问权限修饰符 | public internal private protected |
非托管代码修饰符 | unsafe extern |
(1)重载构造方法
为避免重复,一个构造方法可以用this关键字调用另一个构造方法
当一个构造方法调用另一个时,被调用的构造方法先执行.
using System;
namespace 构造函数重载
{
public class Person
{
private string _name;
private int _age;
public string Name
{
get { return _name; }
set { _name = value; }
}
public int Age
{
get { return _age; }
set { _age = value; }
}
public Person(string name)
{
this.Name = name;
}
public Person(string name, int age):this(name)
{
this.Age = age;
}
}
}
(2)隐式无参数构造方法
默认c#编译器会自动为木有显式定义构造方法的类生成构造方法.一旦显示定义构造方法,系统将不再自动生成无参构造方法,即使显示定义无参构造函数,也不是原来的了
public class Person
{
public Person(){}
}
(3)构造方法和字段初始化顺序
字段初始化按声名的先后顺序,在构造方法之前执行!!!!!!!!!
首先,在声名字段的时候赋予初始值:
class Person
{
int a=10;//第一个被初始化
int b =20;//第二个被初始化
}
(4)非公有构造方法
通常定义非公有构造方法的原因是为了在一个静态方法中控制类实例的创建(单例????).
静态方法可以用于从池中返回类对象,而不必创建一个新对象实例,或者根据不同的输入属性返回不同的子类.
public class Person
{
Person() { }//私有构造方法
public static Person Creat(...)
{
//定义逻辑,返回Person的实例
.......
}
}
this引用指的是引用实例自身,下面,方法Marry将Person的name字段设定为this.
c#中创建类(更新中)的更多相关文章
- JavaScript中创建类,赋值给ajax中的data参数
缘由:因为要给根据是否选中checkbox来动态增加ajax中data的属性(ajax的data属性格式的几种方法,参考http://www.jb51.net/article/46676.htm) d ...
- 在mysql数据库中创建Oracle数据库中的scott用户表
在mysql数据库中创建Oracle数据库中的scott用户表 作者:Eric 微信:loveoracle11g create table DEPT ( DEPTNO int(2) not null, ...
- 在efcore 中创建类 通过实现IEntityTypeConfiguration<T>接口 实现实体类的伙伴类 实现FluentApi
1 创建实体类: public partial class NewsCategory : IAggregationRoot { public NewsCategory() { } public Gui ...
- eclipse中创建类和方法自动注释
<?xml version="1.0" encoding="UTF-8"?><templates><template autoin ...
- Python中的类(中)
上一篇介绍了Python中类相关的一些基本点,本文看看Python中类的继承和__slots__属性. 继承 在Python中,同时支持单继承与多继承,一般语法如下: class SubClassNa ...
- 【java学习】实践中总结--持续更新中
目录: 一些定义 配置环境 相关语法 1.一些定义 java中DO的含义: https://blog.csdn.net/canot/article/details/51698047 DAO 中包含了各 ...
- Typescript中的类 Es5中的类和静态方法和继承(原型链继承、对象冒充继承、原型链+对象冒充组合继承)
<!doctype html> <html> <head> <meta charset="utf-8"> <meta name ...
- 在eclipse中创建Web项目中没有web.xml的解决方法
右键点击项目 → “Java EE Tool” → “Generate Deployment descriptor stub” 即可生成web.xml文件
- ES6中的类
前面的话 大多数面向对象的编程语言都支持类和类继承的特性,而JS却不支持这些特性,只能通过其他方法定义并关联多个相似的对象,这种状态一直延续到了ES5.由于类似的库层出不穷,最终还是在ECMAScri ...
随机推荐
- new Date() iso不支持兼容性问题
在IOS5以上版本(不包含IOS5)中的Safari浏览器能正确解释出Javascript中的 new Date('2013-10-21') 的日期对象. 但是在IOS5版本里面的Safari解释ne ...
- GPUImage的简单使用
GPUImage 是一个开源的图像处理库,提供了非常多的滤镜效果来加工图片.GPUImage 并不像一般的第三方库可以直接拖入到工程中使用,而是需要先在本地编译,然后将编译后的文件拖入到工程中使用.配 ...
- 知道Form.Show()和Form.ShowDialog()的区别吗
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:知道Form.Show()和Form.ShowDialog()的区别吗.
- struts2的json-default和struts-default的区别
http://www.cnblogs.com/lbangel/archive/2013/05/24/3096986.html struts2的json plugin可以实现struts2和json的完 ...
- Hibernate继承映射
在面向对象的程序领域中,类与类之间是有继承关系的,例如Java世界中只需要extends关键字就可以确定这两个类的父子关系,但是在关系数据库的世界中,表与表之间没有任何关键字可以明确指明这两张表的父子 ...
- mfc开发问题_v1
1. 设置对话框按钮背景图片? 首先,设置对话框按钮的属性为Bitmap,然后导入资源文件(一个你需要作为背景的小图片),最后在该对话框类的OnInitDialog函数中添加如下代码: //设置对话框 ...
- 深入理解计算机系统第二版习题解答CSAPP 2.9
基于三元色R(红)G(绿)B(蓝)关闭(0)和打开(1),能够创建8种不同的颜色,如下: R G B 颜色 R G B 颜色 0 0 0 黑色 1 0 0 红色 0 0 1 蓝色 1 0 1 红紫色 ...
- .net+easyui--combobox
一:预定义结构的 select 元素创建组合框(combobox)值固定写死 <select class="easyui-combobox" name="state ...
- CSS样式表介绍
一. CSS中的样式选择 1)内样式(内联样式) style=””; 2)内嵌样式 <style type="text/css"></style> 3 ...
- 20160127 linux 学习笔记
Linux学习笔记第一天 Linux基本介绍 Linux的起源和发展: 简单说linux是一种操作系统,可以安装在包括服务器.个人电脑,乃至PDA.手机.打印机等各类设备中. 起源: Linux起源于 ...