必威-必威-欢迎您

必威,必威官网企业自成立以来,以策略先行,经营致胜,管理为本的商,业推广理念,一步一个脚印发展成为同类企业中经营范围最广,在行业内颇具影响力的企业。

不能从另外一个结构或者类继承,结构中可以定

2019-11-28 22:59 来源:未知

C# 结构(Struct)

在 C# 中,构造是值类型数据布局。它使得三个十足变量可以积攒各个数据类型的相关数据。struct 关键字用于创制布局。

构造是用来代表贰个笔录。假若你想跟踪体育场地中书的动态。您可能想追踪每本书的以下属性:

  • Title
  • Author
  • Subject
  • Book ID

C# 构造的表征

您曾经用了一个回顾的名称叫 Books 的布局。在 C# 中的布局与守旧的 C 或 C++ 中的构造不生龙活虎。C# 中的结构有以下特征:

  • 协会可含蓄艺术、字段、索引、属性、运算符方法和事件。
  • 布局可定义构造函数,但无法定义析构函数。可是,您无法为布局定义暗中同意的布局函数。暗中同意的构造函数是机动定义的,且不可能被改动。
  • 与类差别,构造不能够一而再其余的布局或类。
  • 协会不能够作为任何协会或类的底蕴布局。
  • 组织可达成八个或多少个接口。
  • 构形成员无法钦赐为 abstract、virtual 或 protected。
  • 当你使用 New 操作符创造二个组织对象时,会调用适当的布局函数来创建结构。与类分裂,布局得以不选择New 操作符就可以被实例化。
  • 假设不使用 New 操作符,只有在富有的字段都被初始化之后,字段才被赋值,对象才被接收。

    struct Books
    {
       public string title;
       public string author;
       public string subject;
       public int book_id;
    };  
    

    类 vs 结构

    类和构造有以下多少个基本的不相同点:

    • 类是引用类型,布局是值类型。
    • 布局不支持世袭。
    • 布局不能声称默许的布局函数。

      public void getValues(string t, string a, string s, int id) {

        title = t;
        author = a;
        subject = s;
        book_id = id;
      

      }

     

C#中的布局

//结构示例:
public struct Person
{
   string Name;
   int  height;
   int  weight
}
public bool overWeight()
{
    //implement something
}

  类示例:
   public class TestTime
   {
     int hours;
     int minutes;
     int seconds;
   }

public void passtime()
{
  //implementation of behavior
}
   }
 调用过程:
  public class Test
{
  public static ovid Main
   {
     Person Myperson=new Person      //声明结构
     TestTime Mytime=New TestTime    //声明类
   }
}

概念构造

为了定义多个构造,您总得选择 struct 语句。struct 语句为程序定义了二个暗含五个分子的新的数据类型。

诸如,您能够根据如下的措施声明 Book 结构

struct Books
{
   public string title;
   public string author;
   public string subject;
   public int book_id;
};  

下边包车型地铁顺序演示了组织的用法:

using System;

struct Books
{
   public string title;
   public string author;
   public string subject;
   public int book_id;
};  

public class testStructure
{
   public static void Main(string[] args)
   {

      Books Book1;        /* 声明 Book1,类型为 Book */
      Books Book2;        /* 声明 Book2,类型为 Book */

      /* book 1 详述 */
      Book1.title = "C Programming";
      Book1.author = "Nuha Ali"; 
      Book1.subject = "C Programming Tutorial";
      Book1.book_id = 6495407;

      /* book 2 详述 */
      Book2.title = "Telecom Billing";
      Book2.author = "Zara Ali";
      Book2.subject =  "Telecom Billing Tutorial";
      Book2.book_id = 6495700;

      /* 打印 Book1 信息 */
      Console.WriteLine( "Book 1 title : {0}", Book1.title);
      Console.WriteLine("Book 1 author : {0}", Book1.author);
      Console.WriteLine("Book 1 subject : {0}", Book1.subject);
      Console.WriteLine("Book 1 book_id :{0}", Book1.book_id);

      /* 打印 Book2 信息 */
      Console.WriteLine("Book 2 title : {0}", Book2.title);
      Console.WriteLine("Book 2 author : {0}", Book2.author);
      Console.WriteLine("Book 2 subject : {0}", Book2.subject);
      Console.WriteLine("Book 2 book_id : {0}", Book2.book_id);       

      Console.ReadKey();

   }
}

当下面的代码被编写翻译和施行时,它会爆发下列结果:

必威 1

  在C#中用关键字struct定义叁个协会。从语法上来看,布局与类很肖似,在类中能够包罗的成员大概都得以分包在组织中。举例,结构中得以定义字段、方法、布局函数、属性、事件等。定义构造语法如下:

从地方的例证中我们能够看看,类的扬言和组织的扬言非常相符,只是限制符后边是 struct 照旧 class 的界别,况且选用时,定义新的结构和定义新的类的议程也要命周围,上面批注下它们的例外

C# 结构的特色

你曾经用了多少个简单易行的名字为 Books 的组织。在 C# 中的构造与历史观的 C 或 C++ 中的构造不一致。C# 中的布局有弹指间表征:

  • 布局可含蓄艺术、字段、索引、属性、运算符方法和事件。
  • 构造可定义布局函数,但无法定义析构函数。可是,您不可能为布局定义暗中同意的构造函数。暗许的构造函数是活动定义的,且不可能被改成。
  • 与类分歧,布局不可能持续别的的布局或类。
  • 布局不能够作为其余组织或类的底子布局。
  • 布局可完结叁个或四个接口。
  • 结构成员无法钦命为 abstract、virtual 或 protected。
  • 当你使用 New 操作符成立三个组织对象时,会调用适当的结构函数来创设构造。与类分化,构造得以不选择New 操作符就可以被实例化。
  • 若是不行使 New 操作符,唯有在具有的字段都被早先化之后,字段才被赋值,对象才被应用。

  访问修饰符 struct 构造名

生机勃勃 .类与布局的间距

类 vs 结构

类和布局有以下多少个基本的分化点:

  • 类是援用类型,布局是值类型。
  • 布局不辅助世袭。
  • 组织不能够声称默许的结构函数。

本着上述商议,让我们重写前边的实例:

using System;

struct Books
{
    private string name;
    private string title;
    private string author;
    private string subject;
    private int book_id;
    public void getValues(string n,string t, string a, string s, int id)
    {
        name = n;
        title = t;
        author = a;
        subject = s;
        book_id = id;
    }
    public void display()
    {
        Console.WriteLine("{0}",name);
        Console.WriteLine("Title : {0}", title);
        Console.WriteLine("Author : {0}", author);
        Console.WriteLine("Subject : {0}", subject);
        Console.WriteLine("Book_id :{0}", book_id);
    }

};

public class testStructure
{
    public static void Main(string[] args)
    {

        Books Book1 = new Books(); /* 声明 Book1,类型为 Book */
        Books Book2 = new Books(); /* 声明 Book2,类型为 Book */

        /* book 1 详述 */
        Book1.getValues("book1","C Programming",
        "Nuha Ali", "C Programming Tutorial", 6495407);

        /* book 2 详述 */
        Book2.getValues("book2","Telecom Billing",
        "Zara Ali", "Telecom Billing Tutorial", 6495700);

        /* 打印 Book1 信息 */
        Book1.display();

        /* 打印 Book2 信息 */
        Book2.display();

        Console.ReadKey();

    }
}

 

地方的代码是在books布局中定义了多少个办法getvalues和display,在程序运维时调用Books里面包车型大巴display方法

当上边的代码被编写翻译和实行时,它会发生下列结果:

必威 2

 

  {

  1. 值类型与引用类型
    构造是值类型:值类型在货仓上分红地址,全体的基类型都以布局类型,举个例子:int 对应System.int32 结构,string 对应 system.string 结构,通过利用结构得以创立更加多的值类型
    类是援用类型:引用类型在堆上分配地址
    饭店的实施功用要比堆的进行功效高,不过酒店的能源有限,不合乎管理大的逻辑复杂的靶子。所以协会管理作为基类型对待的小目的,而类管理有些商业逻辑
    因为协会是值类型所以协会之间的赋值能够创立新的构造,而类是援用类型,类之间的赋值只是复制援用
    注:
    a.尽管结构与类的门类不等同,可是他们的基类型都以目的(object),c#中享有品种的基类型都以object
    b.固然构造的实例字段初阶化也接受了New 操作符但是构造对象还是分配在仓房上并非堆上,
    万一不利用“新建”(new卡塔尔(قطر‎,那么在初步化全数字段以前,字段将维持未赋值状态,且对象那时候不可用

    //布局成员

即便接收new初阶化则会给变量赋暗中认可值。即上边假如调用Myperson.height 会默以为0,要是不用new,那样调用是那一个的

  }

2.继承性
协会:无法从此外二个组织如故类世襲,本人也不能被三回九转,即使构造未有刚烈的用sealed注解,可是布局是隐式的sealed .
类:完全可增添的,除非彰显的宣示sealed 不然类能够世袭别的类和接口,自己也能被三回九转
注:尽管构造无法被继承 不过结构能够一而再再而三接口,方法和类世襲继口雷同

  

3.内部构造:
结构:
一贯不默许的布局函数,可是能够增加布局函数
不曾析构函数
还未 abstract 和 sealed(因为不可能持续卡塔尔(英语:State of Qatar)
不能有protected 修饰符
能够不行使new 开头化
在组织中开端化实例字段是荒诞的
也正是说无法
struct xx
{
public int testint=1;//在组织中开首化实例字段是不当的
public static int testint=1//那样是能够的,这时候testint并非实例字段,为静态字段。
}
扬言布局的暗中同意(无参数)布局函数是荒诞的。假使要写结构函数 该函数功用应该是将组织成员开头化为它们的默许值。
如:
struct xx
{
public int testint;
public xx(string yy)
{
testint=yy;
}
}
//上面那样则是谬误的(不能定义八个空的无参数的布局函数)
struct xx
{
public int testint;
public xx()
{
}
}

 1 public struct MyPoint
 2 {
 3     public int x;
 4     public int y;
 5 
 6     public MyPoint(int a, int b)
 7     {
 8         x = a;
 9         y = b;
10     }
11 }

类:
有默许的布局函数
有析构函数
能够动用 abstract 和 sealed
有protected 修饰符
必得使用new 初叶化实例字段和函数方法

  在结构中不可能定义暗许构造函数(即不带参数的结构函数),但能够定义带参数的布局函数,如上面代码定义的构造,定义了带参数的布局函数。

TAG标签:
版权声明:本文由必威发布于必威-编程,转载请注明出处:不能从另外一个结构或者类继承,结构中可以定