首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c#的细节(二)-修饰符

我希望把这些整理出来,可以给初学者一个参考,也给自己一个温故知新的机会。高手就不必花时间来看了。...public、private、proteced我觉得非常比较好理解,麻烦点就是Internal,只能在一个项目中使用,不能跨项目调用,只能自己的项目内使用,即使是子类也不能访问。...protected就只能被子类内部所访问,于是它们的并集就是:同一个项目内或者子类内部可以访问。如果既不是同一程序集也不是子类,就无法访问。...partial :局部类。将你的 class 分为多个部分,编译器会将多个部分拼合在一起。...关于局部类部分你可以看看这里 3、成员修饰符:   abstract:指示该方法或属性没有实现.   const:指定域或局部变量的值不能被改动.

73170
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【C++入门篇】保姆级教程篇【下】

    此时我们再次进行测试: 这个时候我们发现,这样还是不对啊,大家可千万别忘记了,在类内是存在this指针的,成员函数第一个参数为this指针,这是隐藏参数,所以在类内我们要这样写: bool...,所以我们在函数内对flag值进行调整,防止有负数的情况出现。...3、const 成员函数内可以调用其他的非const成员函数吗? 4、非const 成员函数内可以调用其他的const成员函数吗?...这就是初始化列表的用处了,当然更大的用处是为了给引用变量,常变量来初始化的,例如: #include using namespace std; int main() { const...其中有一个·问题是我们如何将创建了几次对象给记录下来,如果用普通成员变量(计数器)来记录创建了多少个对象肯定是不可行的,因为在创建多次对象的时候,每个对象都会给自己的计数器自增。

    14610

    C++面向对象程序设计_Part2

    由于Container类是拥有Component类,所以在构造方面,先调用Component类的默认构造函数,然后再调用Container的构造函数,由内而外的构造,里面做好了,再做外面。...继承的构造函数会首先调用基类的构造函数,然后调用自己的构造函数(由内而外)。析构则相反,先析构自己,然后再调用基类的析构函数。...对于情况1,这是侯捷老师留的作业,自己写代码判断,我写了一个: #include using namespace std; namespace fy1{ class Base...另外,Component类中还有一个虚函数add,这是给目录进行继承的,因为目录可以新建目录和文件,这里不能设置为纯虚函数,因为文件不能继承这个函数,文件是不能在进行添加的。 Prototype ?...静态绑定与动态绑定:当new一个C类时,得到一个指针p(上图所示),当通过p调用vfunc1的时候,实际上是最下面中间语句进行调用的(其中n为编译器给虚函数在虚表中的索引),这是函数的调用方式与c很不一样

    51320

    .NET框架设计(常被忽视的框架设计技巧)

    、元数据应该隐藏在Model背后、元数据与DSL的关系 3.链式配置Dynamic模式(爱不释手的思维习惯编程) 4.委托工厂模式(要优于常见的 工厂,概念更加准确,减少污染) 5.规则外挂(视委托为特殊的规则对象原型...中呢,如果加的话随着代码量的增加,这些都会成为后面维护的成本开销;那么我们如何将干净的POJO对象提供给程序员用,但是在后台我们也能对POJO进行强大的控制?...这是我们的对象模型,那么我们如何将它与数据库相关的信息提取出来形成独立的元数据信息,对元数据的抽取需要动、静结合才行; 什么动、静结合,我们是否都会碰见过这样的问题,很多时候我们的代码在编译时是确定的,...JS上,现在可以在C#中使用,当然你也可以使用专门的动态语言来写更强大的元数据框架,IronRuby、IronPython都是很不错的,简单的了解过Ruby的元数据编程,很强大,如果我们.NET程序员眼馋就用...都是在一些框架、工具中用来做灵活接口用的; 5】规则外挂(视委托为特殊的规则对象原型) 规则外挂其实跟上面的委托工厂有点像,但是绝对不一样的设计思想;如何将规则外挂出去,放入Cache中让运行时可以配置这个规则参数

    1.4K80

    C++查缺补漏

    如果程序中未定义构造函数,编译器将在需要时自动生成一个默认构造函数 参数列表为空,不为数据成员设置初始值 如果类内定义了成员的初始值,则使用类内定义的初始值 如果没有定义类内的初始值,则以默认方式初始化...,只是参数表和初始化列表不同,其初始化算法都是相同的,这时,为了避免代码重复,可以使用委托构造函数 不使用委托构造函数: //构造函数 Clock(int newH, int newM, int newS...友元是C++提供的一种破坏数据封装和数据隐藏的机制 通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息 为了确保数据的完整性,及数据封装与隐藏的原则,建议尽量不使用或少使用友元...默认情况 基类的构造函数不被继承 派生类需要定义自己的构造函数 C++11规定 可用using语句继承基类构造函数 但是只能初始化从基类继承的成员 派生类新增成员可以通过类内初始值进行初始化 语法形式...include using namespace std; class Base{ public: virtual ~Base(); }; Base::~Base() {

    2.6K10

    【C++指南】类和对象(九):内部类

    引言 在 C++ 编程中,内部类(也称为嵌套类)是一个定义在另一个类作用域内的类。 内部类提供了一种封装和逻辑分组的方式,使得代码更加模块化和易于管理。...内部类访问外部类的普通成员,需要借助外部类对象(否则无法得知访问的是哪一个对象的) 例如: #include using namespace std; class A...外部类对内部类没有任何优越的访问权限。 内部类在定义它的外围类的作用域内是可见的,但在外围类外部是不可见的。...————内部类本质也是⼀种封装,当A类跟B类紧密关联,A类实现出来主要就是给B类使用,那么可以考 虑把A类设计为B的内部类,如果放到private/protected位置,那么A类就是B类的专属内部类,...结语 C++ 中的内部类提供了一种灵活的方式来封装和隐藏实现细节,使得代码更加模块化和易于管理。 通过内部类,可以更好地控制访问权限,避免命名冲突,并实现辅助类来支持外围类的功能。

    11610

    模拟隐蔽操作 - 动态调用(避免 PInvoke 和 API 挂钩)

    第二个是最重要的。它从函数指针创建一个委托,并调用由委托包装的函数,传入您提供的参数。参数作为对象数组传入,因此您可以以任何形式传入所需的任何数据。...定义委托的工作方式类似。您可以定义一个类似于定义变量的委托。或者,您可以指定在调用委托包装的函数时要使用的调用约定。...GetExportAddress:从内存中模块的基地址开始,解析模块的PE头来定位特定的函数。可以将字符串、序数或哈希作为您要调用的函数的标识符。...:-P DInvoke 允许您通过动态调用任意非托管模块而不在构建时指定它们来做出不明智的生活选择。 Shellcode 执行 委托实际上是函数指针的包装器。...将函数添加到模块 重载内存中的模块并将结果映射到不同的进程。 用于将非托管 API 调用与托管函数 (Delegate) 挂钩的通用函数。

    2.1K00

    【Android进阶】Kotlin面向对象

    静态内部类 class A {   object Instance {     var instance = A()   }   compannion object {    // A的静态方法     ...没有真正增加代码,扩展的内容不参与多态,调用的哪个就是哪个。但如果子类的扩展覆盖了父类的扩展,如果用子类去调用该函数,会使用子类的扩展函数。总之,谁调用就使用谁的扩展。...  Driver(driver).print() } 从上述代码可以看出,这里的Driver的print委托给BaseImpl实现 属性委托 val/var 属性名:类型 by 表达式 其中表达式指的是委托代理类...然后memoizedFoo委托给computeFoo执行。 Kotlin和Java互调 Kotlin可以支持不写类直接写函数,而Java调用Kotlin这样的函数式,需要写文件名Kt.函数名即可。...总结 本小节主要介绍了面向对象的基本知识和类委托、属性委托等

    53030

    c# 基础语法

    方法和委托调用 x[...] 数组和索引器访问 newT(...) 对象和委托创建 newT(...){...} 使用初始值设定项创建对象 new{...}...} //在声明初始化有元素的数组时,也可以指定数组大小 string[] strings = new int[5]{"H", “E", "L",“L","0"} 函数 函数的参数设置...&传参行为 参数可认为是外部需要函数帮忙处理的数据。...外部通过传递参数的形式,将需要处理的数据交给函数处理。 函数返回值的设置 函数返回值可以认为是外部调用某种行为后得到的一种反馈。...out: 输出参数由被调用的方法赋值,因此按引用传递,如果被调用的方法没有给输出参数赋值,就会出现编译错误,也就是说,只要调用了,就必须给赋值。

    58220

    【重识云原生】第六章容器6.3.7节——命令行工具kubectl

    如果三个条件都被满足,则假定在集群内进行身份验证。         为保持向后兼容性,如果在集群内身份验证期间设置了 POD_NAMESPACE 环境变量,它将覆盖服务帐户令牌中的默认命名空间。...POD_NAMESPACE 环境变量         如果设置了 POD_NAMESPACE 环境变量,对命名空间资源的 CLI 操作对象将使用该变量值作为默认值。...: kubectl exec -ti sh 容器日志: kubectl logs [-f] 导出服务: kubectl expose deploy --port=80 Base64 解码: kubectl...get secret SECRET -o go-template='{{ .data.KEY | base64decode }}'         注意,kubectl run 仅支持 Pod、Replication...MEMORY(limits)":.spec.containers[*].resources.limits.memory 2.4 日志查看         kubectl logs 用于显示 pod 运行中,容器内程序输出到标准输出的内容

    76210

    C#中事件(event)

    事件基于委托,为委托提供了一种发布/订阅机制。在Windows应用程序中Button类提供了Click事件。触发Click事件时调用的处理程序方法需要定义,其参数由委托类型定义。...C#中使用事件需要如下步骤: (1)创建一个委托 (2)将创建的委托与特定事件关联(.NET类库中的很多事情都是已经定制阿红的,所以它们也就有相应的一个委托,在编写关联事件处理程序的时候我们需要和这个委托有相同的签名...) (3)编写事件处理程序 (4)把这个委托实例添加到产生事件对象的事件列表中去(这个过程叫事件订阅) 下面来看一个处理输出字符的事件的实例: 保存事件信息的类 namespace ConsoleApplication.EventDemo...{ get { return keyChar; } } public KeyEventArgs(char keyChar) : base...(3)编写事件处理程序 private void OnkeyDown(Object sender, KeyEventArgs e) { //真正的事件处理函数

    2.2K30

    Kotlin委托

    Kotlin中有委托,这个C#中也有,不过对于学Java的童鞋来说,这是什么鬼啊,到底是干什么用的… 在委托模式中,当有两个对象参与处理同一个请求是,接受请求的对象将请求委托给另一个对象来处理。...类委托 类 Derived 可以继承一个接口 Base,并将其所有共有的方法委托给一个指定的对象,也就是说把类 Derived 因继承而需要实现的方法委托给一个对象,从而不需要在该类内显式的实现: interface...属性委托要求 对于一个只读属性(即 val 声明的),委托必须提供一个名为 getValue 的函数,该函数接受以下参数(可以继承 ReadOnlyProperty 实现该方法): thisRef ——...getValue() 或/和 setValue() 函数可以通过委托类的成员函数提供或者由扩展函数提供。 当你需要委托属性到原本未提供的这些函数的对象时后者会更便利。...:第一个参数 this 引用到外部类 C 的实例而 this::prop 是 KProperty 类型的反射对象,该对象描述 prop 自身。

    1.5K30

    TS中的命名空间合并

    而接口合并的合并需要里面的成员是否有函数成员。...对于里头的函数成员来说,每个同名函数声明都会被当成这个函数的一个重载,当接口 A与后来的接口 A合并时,后面的接口具有更高的优先级 今天要讲的内容也是TS中的声明合并,但这次是命名空间相关的合并 正文...下面会一一讲述 同名的命名空间之间的合并 与接口合并相类似,两个或多个同名的命名空间也会合并其成员 那具体怎么合并呢 对于同名的命名空间之间的合并,记住一下4点: 里头模块导出的同名接口会合并为一个接口...好让合并的类能访问 } 复制代码 命名空间和类的合并,结果是一个类并带有一个内部类 合并同名的命名空间和函数 除了上述的内部类的模式,你在JavaScript里,创建一个函数稍后扩展它增加一些属性也是很常见的...= "Hello, "; } console.log(buildLabel("Sam Smith")); 复制代码 同名的命名空间和枚举 可以用来扩展枚举,还是看官方给的例子吧 enum Color

    1.6K00

    C# 在自定义的控制台输出重定向类中整合调用方信息

    原来我在构造函数中添加了这么一句 —— Console.SetOut (new ConsoleWriter (ShowInfo)); —— 这就把原本输出到控制台的消息,重定向给了方法 ShowInfo...来进行输出,而 ShowInfo 方法内通过设置文本框的文本内容来达到了显示消息的效果: 其中的关键就是自定义类 ConsoleWriter(后面有新版): using System; using...Write 方法,然后在重写的 Write 方法中调用外部设置好的(通过构造函数)相关委托方法进行实际的信息输出。...行号显示的是 18 而不是 69?其实这里显示的信息是构造函数的(因为重定向语句在那里)。那么有没有办法显示实际的调用位置呢?我们继续改造。...,自动识别为调用 ConsoleWriter 中我们新增的那个构造函数: 运行,测试,可以看到方法名和行号都对了: 四、后记及资源 这种重定向的方式个人觉得挺方便的,比如在动态库中全都写成输出控制台的方式

    1.6K20

    C# 事件

    ,就是声明了一个委托类型的变量;具体实现代码如下: using System; namespace Event{ public delegate void myEventHandler(string...恍然大悟,其实myevent事件被编译成了myEventHandler委托的私有委托变量,所以不管你给事件加什么修饰符,最后他都会被编译成目标委托的私有委托变量; 下面是其余两个方法的结构图,贴出来看下...好了,根据上面的图解和推断,大致就知道事件的内部大概的运行机制 myevent确实是myEventHandler类型的委托,只不过不管给myevent添加什么修饰符,他都是私有的,因为它会被编译器强制编译成...如果你定义的事件是private,那么在外部类中就无法调用这个事件当然也就无法吊用这两个方法; add_myevent()方法概述 从上图可以看出,在add_myevent()方法内部,实际上调用了...我们前面提到过两次,说委托实际上是一个类; 2、综上所述:得出这么几个结论 事件在定义之后,会被编译器编译成委托类型的变量,而这个变量是定义(封装)该事件的类所私有的,当外部类使用该事件时无法进行赋值操作

    616100

    【C#学习笔记之一】C#中的关键字

    const 指定无法修改字段或局部变量的值。声明常量的关键字 event 声明事件。常与委托(delegate)一起使用 extern 指示在外部实现方法。...分部类型定义允许将类、结构或接口的定义拆分到多个文件中。 readonly 声明一个字段,该字段只能赋值为该声明的一部分或者在同一个类的构造函数中。 sealed 指定类不能被继承。...常与委托(delegate)一起使用 extern 指示在外部实现方法。 new New 运算符:用于创建对象和调用构造函数。...分部类型定义允许将类、结构或接口的定义拆分到多个文件中。 readonly 声明一个字段,该字段只能赋值为该声明的一部分或者在同一个类的构造函数中。...: base 访问基类的成员。

    2.4K50
    领券