首页 > 编程语言 >c# 类、构造函数、结构的区别

c# 类、构造函数、结构的区别

时间:2023-04-04 14:33:44浏览次数:41  
标签:name 区别 c# sex 构造函数 public string 赋值

结构和类的区别

结构
类型 值类型 引用类型
继承 不能作为基类被继承 可以作父类被继承
构造函数 默认构造函数始终会被调用 如果自定义构造函数,默认的会被替换掉
析构函数 无析构函数 有默认析构函数
字段 不能在声明字段时直接给字段赋值 可以在声明时给字段赋值
静态构造函数 有一个 有一个

结构
1、不能显示定义默认无参的构造函数

2、在结构中不能在声明字段时直接赋值

在结构中想要给字段赋值有两种办法
方法1:在自定义有参构造函数时,传参,赋值
new有参构造,传参

方法2:通过new默认构造函数,创建一个实例
通过实例名.字段的方式赋值(补:在类外访问类成员时,必须为public修饰)


完整代码
`using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace structDemo1
{
class Program
{
static void Main(string[] args)
{
// 结构的字段赋值方式有两种。1 - 系统会调用有参构造函数,(实例化时传参数)
Person2 xiaohua = new Person2("female", "王小花");
Console.WriteLine($"sex:{xiaohua.sex},name:{xiaohua.name}");

        // 结构的字段赋值方式有两种。2-会调用默认无参构造函数,在实例化时赋值
        Person2 zhangsan = new Person2();
        zhangsan.name = "张三";
        zhangsan.sex = "男";
        Console.WriteLine("name={0},sex={1}",zhangsan.name,zhangsan.sex);
    }
}
class Person
{
    //解决方法2:在基类中创建一个默认无参构造函数
    public Person()
    {

    }
    public Person(int age, string name)
    {

    }
}
class Student : Person
{
    public Student()
    {

    }
    //解决方法1,在构建一个有参的构造函数(和基类构造函数签名一样)
    public Student(int age1, string name1) : base(age1, name1)
    {

    }
}

struct Person2
{
    //public Person2()  //Error!结构中默认无参构造函数是系统默认隐式调用,而且,不能自己显式的写出来
    // {

    // }
    public Person2(string sex1, string name1)
    {
        sex = sex1;        // 结构的字段赋值方式有两种。1-在有参构造函数中赋值(实例化时传参数)
        name = name1;
    }

    //public int age = 10;         // Error! 结构中不能直接给字段赋值
    //public int height = 165;

    public string sex;         // 结构的字段赋值方式有两种。
    public string name;
}

}
`

标签:name,区别,c#,sex,构造函数,public,string,赋值
From: https://www.cnblogs.com/Amor-ztt/p/17286321.html

相关文章

  • 【ACM算法竞赛日常训练】DAY10题解与分析【月月给华华出题】【华华给月月出题】| 筛法
    DAY10共2题:月月给华华出题华华给月月出题难度较大。......
  • VSCode的git使用
    只需要安装VSCode即可,其他都不需要安装(如Git等)。1、下载远程Git项目到本地目录2、增删改,之后评论、提交 可以切换分支 add到暂存区gitmergemaster 将远程仓库的最新代码同步到自己的分支......
  • app直播源码,css预加载旋转动画 与 流光字体
    app直播源码,css预加载旋转动画与流光字体一、预加载旋转动画Html<viewclass="concentric_round"></view>​cssbody{}.concentric_round{width:200rpx;height:200rpx;position:relative;position:absolute;top:50%;left:50%;transform:translate(-50%,-100%);}.......
  • Go 语言 new 和 make 关键字的区别
    原文链接: Go语言new和make关键字的区别本篇文章来介绍一道非常常见的面试题,到底有多常见呢?可能很多面试的开场白就是由此开始的。那就是new和make这两个内置函数的区别。其实这个问题本身并不复杂,简单来说就是,new只分配内存,而make只能用于slice、map和chan的初......
  • xcode
    debugProduct->Scheme->programToTest找文件Command+Shift+ORevealinProjectNavigatorCommand+Shift+J......
  • VisionPro处理杂斑-CogPixelMapTool
    PixelMap工具编辑控件为CogPixelMapTool提供图形用户界面,用于映射定义输入图像与输出图像之间的pixelvaluemappings。   第一步点击取消自动计算基准点 第二步,缩放图,右上角找到点。   第三步,调整两个点位。图片变得合理了起来。(无图) ......
  • Cadence应用笔记:原理图导PDF
    设置1.打开菜单栏选择打印2.勾选黑白3.选择一个虚拟打印机......
  • Hot Start Up (easy version) CF1799
    你有两个CPU,n个程序(m个类型)要运行。在不同条件下程序运行的时间不同,但连续运行的时间满足小于等于在不连续状态下运行的时间。  #include<iostream>#include<cstring>#include<queue>usingnamespacestd;constintN=5002;#defineintlonglong#definei......
  • InvokeFieldUpdateService未触发插件值更新
    K3BillView.InvokeFieldUpdateService("F_JNXM_Supplier",0);经验分享:.InvokeFieldUpdateService触发值更新这个方法执行有个前提,必须进行了不同值的赋值,才会触发,例如,下推的时候,如果在转换规则给字段配置了数据,在表单中单独调这个方法是不会执行的,必须得现有一个......
  • CSS: position: relative absolute
    <divclass="course-b"><divclass="outer"><divclass="inner"></div></div></div>.outer{margin:50px;width:200px;height:200px;background:gray;......