首页 > 其他分享 >2 类成员 访问修饰符 方法 参数 out ref params 命名参数 可选参数

2 类成员 访问修饰符 方法 参数 out ref params 命名参数 可选参数

时间:2022-10-29 00:14:33浏览次数:56  
标签:初始化 成员 修饰符 访问 参数 引用 类型 ref

目录

=

1类的概述

类是一种活动的数据结构

  • 数据成员
  • 函数成员

一个 c# 类可以有任意数目的成员和函数成员,成员可以是9种可能的成员类型的任意组合

数据成员存储数据 函数成员执行代码
字段 方法
常量 属性
构造函数
析构函数
运算符
索引器
事件

2类成员

字段和方法是重要的类成员类型,字段是数据成员,方法是函数成员

2.1 字段

字段是隶属于变量

class Program
{
	int a; // 字段
}

与c和c++ 不同,c#在类外不能声明全局变量(字段或变量) 所有的字段都属于类型,而且必须在类型声明内部声明

1 显示和隐示字段初始化

如果没有初始化语句,字段的值会编译器设置默认值,默认值由字段的类型决定,总结起来 每种类型的默认值为0 bool是false 引用类型是 null

例如下面 前两个为隐示初始化,后两个为显示初始化

class MyClass
{
	int F1;				// 初始化为0  --值类型
    string F2;			// 初始化为null -- 引用类型
    int F3 = 25;		
    string F4 = "abcd";
}

2.2 为数据分配内存

使用new方法

Delaler theDealer;		// 声明引用变量
theDealer = new Delaler();	// 为对象分配内存并赋值给变量

如果内存分配给一个引用类型,则对象创建表达式返回一个引用,指向在堆中被分配并初始化的对象实例

image-20220930101136659

3 访问修饰符

5种成员控制如下,目前描述前两种

  • 私有的 private
  • 公有的 public
  • 受保护的 protected
  • 内部的 internal
  • 受保护内部的 protected internal

私有访问和公有访问

私有成员只能从声明他的类内部访问,其他的类不能看见或访问他们

  • 私有访问是默认的额访问级别,如果一个成员没有加访问修饰符,那他就是私有成员
  • 还可以使用private修饰符讲一个成员声明为私有
private int MyInt;    // 显示声明为私有
	    int Myint2;   // 隐示声明为私有

从类中访问私有方法

class MyTest
{
	private int Height = 175;		// 显示初始化
    
    public void GetHeight(){		
        return Height;
    }
}

MyTest test =new MyTest();
int height = test.GetHeight();

方法=

1 方法

1.1 本地变量

image-20220930105226137

1.2 类型推断和 var 关键字

var只是一个速记 表示任何可以总初始化语句的右边推断出的类型

使用var关键字的条件

  • 只能用于本地变量,不能用于字段
  • 只能在变量声明中包含初始化时使用
  • 一旦编译器推断出变量类型,他就固定且不能更改

1.3 嵌套块中的本地变量

image-20220930105937167

1.4 本地常量

一旦初始化,,他的值就不能改变

  • 常量声明必须初始化
  • 常量在声明后不能改变
  • 类型之前加const关键字
const string ip = "192.168.1.10";

2 参数

值参数

  • 在栈中为形参分配空间
  • 将实参的值复制给形参

image-20220930111146324

image-20220930111223162

image-20220930111230363

引用参数 ref

image-20220930111325519

image-20220930112807544

引用类型作为值参数和引用参数

image-20220930113018885

值传递

image-20220930112311659

引用传递

image-20220930112558059

总结: 值传递 是复制一份 包括引用类型 也是复制一份引用 ,当引用new的时候相当于从新创建了一个对象

而ref 只是把 栈区中的 引用起了一个别名(形参) 所以引用都是同一个 ,怎么改都一样

3 输出参数 out

image-20220930113244824

image-20220930113343419

4 参数数组

参数类型类型都需要严格按照实参数对于形参传值,参数数组则不同,他允许零个或多个实参对应一个特殊的形参

  • 在一个参数列表中只能有一个参数数组
  • 如果有 他必须是列表中最后一个
  • 有参数数组表示的所有参数都必须具有相同的类型

声明一个参数数组必须做的事:

  • 在数据类型前面使用params修饰符
  • 在数据类型后加[]
void ListInts(params int[] inVals){}

调用

int[] intArray = {1,2,3,4};
ListInts(intArray);

image-20220930144641489

image-20220930150026356

5 命名参数

image-20220930150236964

6 可选参数

image-20220930212814289

image-20220930212833701

标签:初始化,成员,修饰符,访问,参数,引用,类型,ref
From: https://www.cnblogs.com/lddragon1/p/16837876.html

相关文章

  • 5 访问修饰符 抽象类 抽象成员 密封类 静态类 扩展方法 命名约定
    目录访问修饰符抽象成员抽象类密封类静态类扩展方法命名约定访问修饰符所有声明在类中的成员都是可见的,无论他们的访问性如何。继承的成员对派生的成员可以是可见的,也......
  • 【python】装饰器参数
    装饰器是AOP编程思想,给主体函数增加功能,又不让代码入侵到主体函数中,实现高内聚,低耦合。参数有两种,一种是功能函数带参数、另外一种是装饰器函数带参数,如果装饰功能部分代......
  • 菲涅尔反射 Fresnel Reflectance
    入射光射到平面上后会被分为反射和折射两个部分,反射向量\(\mathbf{r}_i\)和入射向量\(\mathbf{l}\)关于法线\(\mathbf{n}\)有相同的夹角\(\theta_i\),反射向量\(\ma......
  • 可变参数
    (1)可变参数:方法形参的个数是可以发生变化的(2)格式:属性类型...名字eg.int...args(3)底层:可变参数底层就是一个数组,只不过不需要我们自己创建,Java会帮我们创建好。(4)细节:1.......
  • ajaxFileUpload.js 无刷新上传图片,支持多个参数同时上传,支持 ie6-ie10
    ajaxFileUpload无刷新上传的原理:在页面动态创建form表单和ifram贞,设定form表单提交的目标为ifram贞,将文件域和要post的参数动态写入form表单中,然后提交from......
  • 企业库5.0——参数化查询、带有事务的参数化查询
    SqlDatabasem_db=DatabaseFactory.CreateDatabase("数据库连接串配置节名");///<summary>///执行带有查询参数的sql语句,返回受影响行数///</summary>......
  • 类型参数的约束--Where的使用
    类型参数的约束(C#编程指南)本文内容使用约束的原因约束多个参数未绑定的类型参数类型参数作为约束notnull约束class约束default约束非托管约束委托约束枚......
  • vue事件修饰符
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><metahttp-e......
  • JavaScript 默认参数、动态参数、剩余参数
    默认参数:<script>functionselet(num,max){console.log(num+max);}selet(1,5);</script>动态参数:<script>f......
  • C++——指针作为函数参数传递需要注意的问题
    指针作为函数参数传递的一些问题总结:#define_CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<iostream>#include<cstdlib>#include<cstring>usingnamespace......