C# 语言规范--1.7 类

规范

   类声明定义新的引用类型。一个类可以从另一个类继承,并且可以实现多个接口。
    类成员可以包括:常数、字段、方法、属性、事件、索引器、运算符、实例构造函数、析构函数、静态构造函数和嵌套类型声明。每个成员都有关联的可访问性,它控制能够访问该成员的程序文本区域。有五种可能的可访问性形式。下表概述了这些形式。

    形式 直观含义
public
 不限制访问。
protected
 访问限于该成员所属的类或从该类派生来的类型。
internal
 访问限于此程序。
protected internal
 访问限于此程序或从该成员所属的类派生的类型。
private
 访问限于该成员所属的类型。

示例

using System;
class MyClass
{
   public MyClass() {
      Console.WriteLine("Instance constructor");
   }
   public MyClass(int value) {
      MyField = value;
      Console.WriteLine("Instance constructor");
   }
   ~MyClass() {
      Console.WriteLine("Destructor");
   }
   public const int MyConst = 12;
   public int MyField = 34;
   public void MyMethod(){
      Console.WriteLine("MyClass.MyMethod");
   }
   public int MyProperty {
      get {
         return MyField;
      }
      set {
         MyField = value;
      }
   }
   public int this[int index] {
      get {
         return 0;
      }
      set {
         Console.WriteLine("this[{0}] = {1}", index, value);
      }
   }
   public event EventHandler MyEvent;
   public static MyClass operator+(MyClass a, MyClass b) {
      return new MyClass(a.MyField + b.MyField);
   }
   internal class MyNestedClass
   {}
}
    显示了一个类,它包含了具有各种可访问性的成员。示例

class Test
{
   static void Main() {
      // Instance constructor usage
      MyClass a = new MyClass();
      MyClass b = new MyClass(123);
      // Constant usage
      Console.WriteLine("MyConst = {0}", MyClass.MyConst);
      // Field usage
      a.MyField++;
      Console.WriteLine("a.MyField = {0}", a.MyField);
      // Method usage
      a.MyMethod();
      // Property usage
      a.MyProperty++;
      Console.WriteLine("a.MyProperty = {0}", a.MyProperty);
      // Indexer usage
      a[3] = a[1] = a[2];
      Console.WriteLine("a[3] = {0}", a[3]);
      // Event usage
      a.MyEvent += new EventHandler(MyHandler);
      // Overloaded operator usage
      MyClass c = a + b;
   }
   static void MyHandler(object sender, EventArgs e) {
      Console.WriteLine("Test.MyHandler");
   }
   internal class MyNestedClass
   {}
}
    显示了这些成员的用法。

时间: 2024-11-05 16:31:15

C# 语言规范--1.7 类的相关文章

《Groovy语言规范》-语法

原文链接  译者:王山山 语法 本章节涵盖了Groovy编程语言的语法.Groovy语言的语法源自Java语法,为Groovy增强了特定构造,允许一定程度上的简化语法. 1.注释 1.1.单行注释 单行注释以//开始,在一行中任何位置都可以被发现.//后面的字符,直到一行的末尾都是注释的一部分. // a standalone single line comment println "hello" // a comment till the end of the line 1.2.多行

《Groovy语言规范》-语法(一)

语法 本章节涵盖了Groovy编程语言的语法.Groovy语言的语法源自Java语法,为Groovy增强了特定构造,允许一定程度上的简化语法. 1.注释 1.1.单行注释 单行注释以//开始,在一行中任何位置都可以被发现.//后面的字符,直到一行的末尾都是注释的一部分. // a standalone single line comment println "hello" // a comment till the end of the line 1.2.多行注释 一个多行注释以/*开

JAVA语言规范-线程和锁章节之同步、等待和通知

原文链接  本文是Oracle官方<Java语言规范>的译文 JAVA语言规范:线程和锁 1 同步 JAVA编程语言提供了线程间通信的多种机制.这些方法中最基本的是同步化,此方法是使用监视器实现的.JAVA中每个对象与一个监视器相关联,一个线程可以加锁和解锁监视器.一次仅有一个线程可能在监视器上持有锁.尝试锁住该监视器的任何其他线程被阻塞,直到它们可以再该监视器上获得一个锁.线程t可以多次锁住特别的监视器:每个解锁将一个加锁操作的作用反转来了. synchronized语句计算了一个对象的引用

JAVA语言规范:线程和锁

JAVA语言规范:线程和锁 概述: 前面章节的大多数讨论,都是关于通过单线程一次执行单个语句或者表达式.而JAVA虚拟机可以支持多线程同时执行.这些线程可以独立执行代码操作,而操作后所产生的值会保留在共享内存当中.单处理器和多处理器都能支持多线程,它们都是通过分配CPU时间片来执行代码. 线程由Thread类表示.用户创建线程的唯一方式是创建此类的一个对象:每个线程和这样的一个对象相关.当在相应的Thread对象上调用start()方法是,一个线程将启动. 线程的行为,特别是当不正确同步时,容易

分清“语言/规范”以及“平台/实现”,以及跨平台.NET开发

在许多年前,"语言"就等同于"平台",例如C,C++以及最早的Ruby和Python等等.但是随着技术发展,出现了一些通用的平台,例如.NET和Java,逐渐这些平台上的语言也越来越多.再后来,某些语言在不同平台上的实现也越来越多,事情也变得有些复杂.技术在发展,但是从目前社区的讨论中,我发现许多朋友的观念还没有跟上.简单地说,如今的观念,一定要从"语言即平台"切换成"语言及平台",当分清"语言"和&quo

Facebook 推出 PHP 语言规范草案

PHP是最广泛使用的脚本语言之一,被数以千万计的网站使用,但直到现在它才有一个正式的语言规范.Facebook工程师和PHP核心开发者 Sara Golemon在上月初举行的OSCON会议上宣布了制定正式规格的计划,现在规格的草案已经发布在Github上. Facebook网站主要是基于PHP语言,过去几年Facebook向PHP贡献了许多开源项目,如虚拟机HHVM,翻译器HPHPc. 传送门(GitHub):https://github.com/php/php-langspec/blob/ma

广电总局规范婚恋交友类节目

据新华社北京6月12日电 广电总局12日通报,总局2日和8日先后下发管理通知规范婚恋交友类电视节目.通知要求,婚恋交友类电视节目不能由演员.模特.节目主持人."富二代"."成功人士"等身份的嘉宾占据荧屏:不得选择社会形象不佳或有争议的人物担当主持人:不得以婚恋的名义对参与者进行羞辱或人身攻击,甚至讨论低俗涉性内容,不得展示和炒作拜金主义等不健康.不正确的婚恋观. 通知说,今年以来,一些电视台上星频道开办了<非诚勿扰><为爱向前冲><缘来

C++语言编写写日志类_C 语言

使用C++语言编写写日志类,支持写日志级别设置.支持多线程.支持可变形参表写日志. 主要提供以下接口: 1.设置写日志的级别 2.写关键日志信息 3.写错误日志信息 4.写警告日志信息 5.写一般日志信息 #ifndef COMMAND_DEFINE_H #define COMMAND_DEFINE_H //日志级别的提示信息 static const char * KEYINFOPREFIX = " Key: \n"; static const char * ERRORPREFIX

一起谈.NET技术,分清“语言/规范”以及“平台/实现”,以及跨平台.NET开发

在许多年前,"语言"就等同于"平台",例如C,C++以及最早的Ruby和Python等等.但是随着技术发展,出现了一些通用的平台,例如.NET和Java,逐渐这些平台上的语言也越来越多.再后来,某些语言在不同平台上的实现也越来越多,事情也变得有些复杂.技术在发展,但是从目前社区的讨论中,我发现许多朋友的观念还没有跟上.简单地说,如今的观念,一定要从"语言即平台"切换成"语言及平台",当分清"语言"和&quo