C#基础知识整理:C#类和结构(1)

1、结构功能特性? 实现代码?
结构用struct关键字定义的,与类类似,但有本质区别。结构实质是一个值类型,它不需要对分配的。
结构的特性:
(1)、结构作为参数传递时,是值传递。
(2)、结构的构造函数必须带参数的。
(3)、结构实例化可以不用new的。
(4)、结构不能继承,但是可以实现接口。
(5)、结构中不能初始化实例字段。
例:

using System;using System.Collections.Generic;using System.Text;namespace TestStruct{    class Program    {        public struct Circle     //定义一个圆        {            private const double pi = 3.1415926;            public double radius;  //半径            ///             /// 构造函数            ///             public Circle(double r)            {                radius = r;            }            ///             /// 面积            ///             public double CArea()            {                return 3.14 * radius * radius;            }        }        static void Main(string[] args)        {            Circle circle1;    //不用new实例化            circle1.radius = 5;            Console.WriteLine("圆面积为:" + circle1.CArea());            Circle circle2 = new Circle(1);  //用new实例化            Console.WriteLine("圆面积为:" + circle2.CArea());            Console.ReadLine();        }    }}

2、什么是委托? 特点? 何时使用委托而不使用接口? 如何声明、实例化和使用委托?

(1)、委托是一个类,它定义了方法的类型,可以讲方法当做另一个方法的参数。避免在程序中使用分支,

程序扩展性更好。
例子:

  class Program    {        public delegate void PrinteDelegate(string name);        private static void PrinteEnglish(string name)        {            Console.WriteLine("Your Name: " + name);        }        private static void PrinteChinese(string name)        {            Console.WriteLine("你的大名: " + name);        }        private static void Printe(string name, PrinteDelegate MakeGreeting)        {            MakeGreeting(name);        }        static void Main(string[] args)        {            Printe("Sam Young", PrinteEnglish);            Printe("白杨树", PrinteChinese);            Console.ReadLine();        }    }

(2)、委托类似于 C++ 函数指针,但它是类型安全的。

委托允许将方法作为参数进行传递。

委托可用于定义回调方法。

委托可以链接在一起;例如,可以对一个事件调用多个方法。

方法不需要与委托签名精确匹配。有关更多信息,请参见协变和逆变。

C# 2.0 版引入了匿名方法的概念,此类方法允许将代码块作为参数传递,以代替单独定义的方法。

使用委托,我觉得应该在需要分支调用不同方法时使用。但是例如工厂模式中,根据分支实例化不同的类

,这时就用接口。

委托是一个类,它定义了方法的类型,使得可以将方法当作另一个方法的参数来进行传递,这种将方法动

态地赋给参数的做法,可以避免在程序中大量使用If-Else(Switch)语句,同时使得程序具有更好的可扩

展性。

3、什么是部分类/分部类? 哪些功能特性? 实现代码? 适用场合? 需遵循几个规则?
分部类就是将一个类用partial关键字,分成好几个独立文件,但实质还是一个类。一般当一个类行数太多或者某些功能比较独立可以用分部类,最常见就是窗体Form.cs和Form.designer.cs。
一般需遵循如下规则:
(1)、必须使用partial 关键字

(2)、虽然有不同的部分,但是各个部分必须具有相同的可访问性,如public、private 等

(3)、如果将任意部分声明为抽象的、密封的,则整个类型都被视为抽象的、密封的

(4)、如果任意部分声明继承基类时,则整个类型都将继承该类

(5)、 各个部分可以指定不同的基接口,最终类型将实现所有分部声明所列出的全部接口

(6)、在某一分部定义中声明的任何类、结构或接口成员可供所有其他部分使用

(7)、嵌套类型可以是分部的,即使它们所嵌套于的类型本身并不是分部的也如此。

 以上就是C#基础知识整理:C#类和结构(1)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 06:18:04
下一篇 2025年12月17日 06:18:11

相关推荐

  • C#基础知识整理:C#类和结构(2)

      1、什么是构造函数? 有哪些构造函数? 各个构造函数的定义、实现方法、注意事项?所谓构造函数,就是一个方法,这个方法可以初始化对象,即运行完这个函数后,内存总开辟了一块该类的对象的空间。有三种:正常的构造函数,也就是实例化构造函数;私有构造函数;静态构造函数。实例化构造器: public cla…

    2025年12月17日
    000
  • C#中使用gRPC

    由于有nuget,使得c#在配置项目时非常简单。 1. 在NuGet中添加ProtocolBuffer和gRPC引用 protocol buffer 3.0版本,在NuGet插件界面选择Include Prerelease,查找google protocol buffer。如果不选择include …

    好文分享 2025年12月17日
    000
  • C#理解泛型

    简介 Visual C# 2.0 的一个最受期待的(或许也是最让人畏惧)的一个特性就是对于泛型的支持。这篇文章将告诉你泛型用来解决什么样的问题,以及如何使用它们来提高你的代码质量,还有你不必恐惧泛型的原因。 泛型是什么? 很多人觉得泛型很难理解。我相信这是因为他们通常在了解泛型是用来解决什么问题之前…

    好文分享 2025年12月17日
    000
  • C#基础之yield与Singleton

    1.实例解析yiled的作用 最近参加java笔试题第一次见到yield这个关键字,既然遇见了那肯定要掌握,下面是c#中关于yield关键字的总结。yield这个关键字作用于迭代器块中,其最本质的功能有2个:一是“依次”向枚举对象提供值,二是发出迭代结束信号。这两个功能对应的语句分别是yield r…

    2025年12月17日
    000
  • C# 继承

    继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类来定义一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。 当创建一个类时,程序员不需要完全重新编写新的数据成员和成员函数,只需要设计一个新的类,继承了已有的类的成员即可。这个已有的类被称为的基…

    好文分享 2025年12月17日
    000
  • C# 多线程经典示例 吃苹果

    本文主要讲述了多线程开发中经典示例,通过本示例,可以加深对多线程的理解。 示例概述:   下面用一个模拟吃苹果的实例,说明C#中多线程的实现方法。要求开发一个程序实现如下情况:一个家庭有三个孩子,爸爸妈妈不断削苹果往盘子里面放,老大、老二、老三不断从盘子里面取苹果吃。盘子的大小有限,最多只能放5个苹…

    2025年12月17日
    000
  • C#希尔排序

    c#希尔排序 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class ShellSorter { public static int[] …

    2025年12月17日 好文分享
    000
  • C# 选择排序

    c# 选择排序 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Sort { class SelectSorter { public static int[…

    2025年12月17日
    000
  • C#编程中的泛型

    .net 1.1版本最受诟病的一个缺陷就是没有提供对泛型的支持。通过使用泛型,我们可以极大地提高代码的重用度,同时还可以获得强类型的支持,避免了隐式的装箱、拆箱,在一定程度上提升了应用程序的性能。本文将系统地为大家讨论泛型,我们先从理解泛型开始。 1.1 理解泛型 1.1.1 为什么要有泛型? 我想…

    好文分享 2025年12月17日
    000
  • C#的扩展方法解析

    在使用面向对象的语言进行项目开发的过程中,较多的会使用到“继承”的特性,但是并非所有的场景都适合使用“继承”特性,在设计模式的一些基本原则中也有较多的提到。 继承的有关特性的使用所带来的问题:对象的继承关系实在编译时就定义好了,所以无法在运行时改变从父类继承的实现。子类的实现与它父类有非常紧密的依赖…

    好文分享 2025年12月17日
    000
  • C#基础回顾Async 的返回类型

    序 博主简单数了下自己发布过的异步文章,已经断断续续 8 篇了,这次我想以 async 的返回类型为例,单独谈谈。 异步方法具有三个可能的返回类型:Task、Task 和 void。  什么时候需要使用哪一种返回类型,具体情况需要具体分析。如果使用不当,程序的执行结果也许并不是你想要的,下面我们就来…

    好文分享 2025年12月17日
    000
  • C#开发之winform(公共控件)

    一、客户端设计思路 1.理顺设计思路,架构框架 2.设计界面 3.编写后台代码 4.数据库访问 二、公共控件 1、Button(按钮):        ⑴ Enabled :确定是否启用控件        ⑵ Visible:确定控件是否课件; 2、CheckBox(多选项) 、CheckListB…

    好文分享 2025年12月17日
    000
  • C#拾遗之小知识(三):类

    是抽象的概念。   例如Dog类描述了狗有的一些特性,体重、身高、年龄、以及吼叫等等。 public class Dog  {  string dogBreed;//犬种  int weight; //体重  int height; //升高  int age; //年龄  public void …

    好文分享 2025年12月17日
    000
  • C#拾遗之小知识(四):继承

    方法重写:     基类方法标识virtual关键字,子类(继承类)中方法重写标识override关键字。     重写的方法必须跟基类的类型相同,如方法名称、返回和接受参数。 public class Class1 { public virtual void show(int i) {……} } …

    好文分享 2025年12月17日
    000
  • C#拾遗之小知识(五):抽象类&接口

    抽象类abstract: 抽象类和抽象方法可以用abstract关键字进行标识。就是没有完全定义的类或方法。所以不能直接实例化操作。 就因为他没完全定义所以不能用sealed关键字进行密封。 抽象方法不含程序主体: public abstract class Student { //抽象方法,不含程…

    好文分享 2025年12月17日
    000
  • C#拾遗之小知识(六):数组

    数组: Int [] intArray = new int[6];Int [][] intArray = new int[2][];Int [][][] intArray = new int[2][][];intArray[1][2][1] = 3;Int [ , ] myTable = new i…

    好文分享 2025年12月17日
    000
  • C#进阶系列——AOP?AOP!

    前言:这篇打算写写aop,说起aop,其实博主接触这个概念也才几个月,了解后才知道,原来之前自己写的好多代码原理就是基于aop的,比如mvc的过滤器filter,它里面的异常捕捉可以通过filterattribute,iexceptionfilter去处理,这两个对象的处理机制内部原理应该就是aop…

    2025年12月17日 好文分享
    000
  • C#中CLR(公共语言运行时)与IL(中间代码)

    .net平台中的CLR 首先要说明的是,.net平台与c#不是一回事 它是c#,vb.net等程序运行的平台。 CLR是公共语言运行时,是 .NET Framework的重要组成部分。它提供了内存管理、线程管理和异常处理等服务,而且还负责对代码实施严格的类型安全检查,保证了代码的正确性。 事实上,类…

    2025年12月17日
    000
  • C#基础系列:Linq to Xml读写xml

    前言:xml的操作方式有多种,但要论使用频繁程度,博主用得最多的还是linq to xml的方式,觉得它使用起来很方便,就用那么几个方法就能完成简单xml的读写。之前做的一个项目有一个很变态的需求:c#项目调用不知道是什么语言写的一个webservice,然后添加服务引用总是失败,通过代理的方式动态…

    好文分享 2025年12月17日
    000
  • C#基础之内存分配

    1.创建一个对象 一个对象的创建过程主要分为内存分配和初始化两个环节。在.NET中CLR管理的内存区域主要有三部分:栈、GC堆、LOH堆,栈主要用来分配值类型数据。它的管理是有系统控制的,而不是像GC堆那样是由GC控制的。当线程执行完值类型实例所在方法后,这块空间将会被自动释放,一般栈的执行效率高不…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信