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 ...
随机推荐
- C#- 布署WinForm程序
1:新建安装部署项目 打开VS,点击新建项目,选择:其他项目类型->安装与部署->安装向导(安装项目也一样),然后点击确定.(详细见下图) ,此主题相关图片如下: 2:安装向导 关闭后打开 ...
- HTML---Android与js交互实例
Android 中可以通过webview来实现和js的交互,在程序中调用js代码,只需要将webview控件的支持js的属性设置为true Android(Java)与JavaScript(HTML) ...
- 24C02操作--松瀚汇编源码
; ; P_CLKIIC EQU P1.2 ; P_DATIIC EQU P1.3 ; PM_DATIIC EQU P1M.3 ; EE_ADDR DS 1 ;地址寄存器 ; TMP3_IIC DS ...
- cocos2dx js文件加密为jsc文件
发布产品,脚本代码是必须要加密的 偶尔会出现编译后的jsc无法运行,或者某些jsb自定义的函数找不到, 最好将require("jsb.js")的全部内容整合到一个文件,然后编译j ...
- partition例子
10.13 标准库定义了名为partition的算法,它接受一个谓词,对容器内容进行划分,使得谓词为true的值会排在容器的前半部分,而使谓词为false的值会排在后半部分.算法返回一个迭代器,指向最 ...
- 进程控制之waitid函数
Single UNIX Specification的XSI扩展包括了另一个取进程终止状态的函数--waitid,此函数类似于waitpid,但提供了更多的灵活性. #include <sys/w ...
- Q_INIT_RESOURCE宏
QT应用程序,无论是exe,staticlib,还是dll程序,都可以通过qrc文件来导入各种资源. qrc会将这些资源文件转换为相应代码,参与应用程序的编译. 这样做的好处就是:简化了应用程序发 ...
- wpf 计算器布局练习
先看一下windows自带计算机的布局: 大概布局能看出,有菜单栏(menu),有显示框(textbox),然后剩下的6行5列的布局 先看下代码: <StackPanel> <Gri ...
- c语言学习
#include <stdio.h>void sum_diff(int *n1,int *n2,int *sum,int *diff){ *sum=*n1+*n2; *diff=(*n1& ...
- JAVA_基础面试题
1.面向对象的特征有哪些方面 1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面.抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节.抽 ...