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 ...
随机推荐
- Webdriver:Unsupported Marionette protocol version 2, required 3
升级到firefox到47以上版本即可 坑人的Mozilla不能起个我们熟识的名字吗? 先是webdriver.gecko.driver后是Marionette protocol. 1.WebDr ...
- Centos6.3建立FTP
2014年2月22日 16:54:20 1. 安装ftp yum install vsftpd ftp 2. 编辑/etc/vsftpd/vsftpd.conf chroot_list ...
- 版本控制Subversion TortoiseSVN apache VisualSVN笔记(转载)
转载于http://blog.sina.com.cn/s/blog_6b94d5680101m7ah.html Subversion(简称svn)是近年来崛起的版本管理软件,是cvs的接班人.目前,绝 ...
- HDInsight-Hadoop实战(一)站点日志分析
HDInsight-Hadoop实战(一)站点日志分析 简单介绍 在此演示样例中.你将使用分析站点日志文件的 HDInsight 查询来深入了解客户使用站点的方式.借助此分析.你可查看外部站点一天内对 ...
- UVA Knight Moves
题目例如以下: Knight Moves A friend of you is doing research on the Traveling Knight Problem (TKP) where ...
- java缓存算法【转】
http://my.oschina.net/u/866190/blog/188712 提到缓存,不得不提就是缓存算法(淘汰算法),常见算法有LRU.LFU和FIFO等算法,每种算法各有各的优势和缺点及 ...
- PERCONA-TOOLKIT 工具的安装与使用2
[root@server-mysql ~]# cd /usr/bin [root@server-mysql bin]# ls pt* pt-align pt-duplicate-key-checker ...
- android学习资料
在线查看android源码 1. https://github.com/android 2. http://grepcode.com/project/repository.grepcode.com ...
- 选择 GCD 还是 NSTimer ?
我们常常会延迟某件任务的执行,或者让某件任务周期性的执行.然后也会在某些时候需要取消掉之前延迟执行的任务. 延迟操作的方案一般有三种: 1.NSObject的方法: 2.使用NSTimer的方法: 3 ...
- MYSQL小常识
在mysql里面利用str_to_date()把字符串转换为日期 此处以表T_TGS_ALARMED的BJSJ为例,查询当前时间在此范围之内的数据. insert into T_TGS_ALARMED ...