文档章节

C# 语法练习(9): 类[一] - 访问限制、方法、字段、属性

涂孟超
 涂孟超
发布于 2014/09/26 15:32
字数 649
阅读 12
收藏 0

所有类默认继承于 System.Object(或叫 Object):
using System;

class MyClass1
{

}

class MyClass2 : Object
{

}

class MyClass3 : System.Object
{

}

class Program
{
    static void Main()
    {
        MyClass1 obj1 = new MyClass1();
        MyClass2 obj2 = new MyClass2();
        MyClass3 obj3 = new MyClass3();

        Console.WriteLine(obj1.ToString()); //MyClass1
        Console.WriteLine(obj2.ToString()); //MyClass2
        Console.WriteLine(obj3.ToString()); //MyClass3

        Console.ReadKey();
    }
}

 
 
 
 
 

 

 

  

类的访问限制和抽象类、密封类:
using System;

/* internal: 只用于当前项目的类, 这是默认的可以省略 */
/* public  : 公开使用的类 */
class MyClass1          { }
internal class MyClass2 { }
public class MyClass3   { }

/* abstract: 只能继承、不能直接实例化的类  */
abstract class MyClass4          { }
internal abstract class MyClass5 { }
public abstract class MyClass6   { }

// sealed: 不能继承的类
sealed class MyClass7          { }
internal sealed class MyClass8 { }
public sealed class MyClass9   { }

class Program
{
    static void Main()
    {
        MyClass1 obj1 = new MyClass1();
        MyClass2 obj2 = new MyClass2();
        MyClass3 obj3 = new MyClass3();
        /* MyClass4、MyClass5、MyClass6 是抽象类, 不能实例化  */
        MyClass7 obj7 = new MyClass7();
        MyClass8 obj8 = new MyClass8();
        MyClass9 obj9 = new MyClass9();

        Console.WriteLine(obj1.ToString()); //MyClass1
        Console.WriteLine(obj2.ToString()); //MyClass2
        Console.WriteLine(obj3.ToString()); //MyClass3
        Console.WriteLine(obj7.ToString()); //MyClass7
        Console.WriteLine(obj8.ToString()); //MyClass8
        Console.WriteLine(obj9.ToString()); //MyClass9

        Console.ReadKey();
    }
}

 
 
 
 
 

 

 

  

方法的访问限制:
using System;

class MyClass
{
    /* private: 类自身使用的私有方法, 这是默认的 */
    string Method1()           { return "Method1"; }
    private string Method2()   { return "Method2"; }

    /* protected: 子类可以继承的方法 */
    protected string Method3() { return "Method3"; }

    /* internal: 当前项目可以使用的方法 */
    internal string Method4()  { return "Method4"; }

    /* public: 公开的方法 */
    public string Method5()    { return "Method5"; }
}

class Program
{
    static void Main()
    {
        MyClass obj = new MyClass();

        /* 由于访问级别的限制, MyClass 的 Method1、Method2、Method3 都不能访问 */

        Console.WriteLine(obj.Method4()); //Method4
        Console.WriteLine(obj.Method5()); //Method5

        Console.ReadKey();
    }
}

 
 
 
 
 

 

 

  

静态方法:
using System;

class MyClass
{
    /* 静态方法 */
    public static string Fun1()   { return "Fun1"; }
    internal static string Fun2() { return "Fun2"; }

    /* 一般方法 */
    public string Fun3()          { return "Fun3"; }
    internal string Fun4()        { return "Fun4"; }
}

class Program
{
    static void Main()
    {
        /* 静态方法通过类名调用: */
        Console.WriteLine(MyClass.Fun1()); //Fun1
        Console.WriteLine(MyClass.Fun2()); //Fun2

        /* 非静态方法通过对象调用: */
        MyClass obj = new MyClass();
        Console.WriteLine(obj.Fun3());     //Fun3
        Console.WriteLine(obj.Fun4());     //Fun4

        Console.ReadKey();
    }
}

 
 
 
 
 

 

 

  

字段:
using System;

class MyClass
{
    public int F1; /* 字段也有 public、internal、protected、private 的区别, 默认是 private */
    public static int F2;       /* 静态字段, 可通过类名读写 */
    public const int F3 = 2008; /* 常量字段, 可通过类名读, 只读 */
    public readonly int F4;     /* 只读字段, 通过对象读; 只能在声明时和构造函数中赋值 */
    
    public MyClass()
    {
        F4 = 2010;
    }
}

class Program
{
    static void Main()
    {
        /* 通过类名可以访问 F2、F3; 但 F3 是只读的 */
        Console.WriteLine(MyClass.F2); //0
        Console.WriteLine(MyClass.F3); //2008
        MyClass.F2 = 2009;
        Console.WriteLine(MyClass.F2); //2009

        /* 通过对象可以访问 F1、F4; 但 F4 是只读的 */
        MyClass obj = new MyClass();
        Console.WriteLine(obj.F1);     //0
        Console.WriteLine(obj.F4);     //2010
        obj.F1 = 2009;
        Console.WriteLine(obj.F1);     //2009

        Console.ReadKey();
    }
}

 
 
 
 
 

 

 

  

属性:
using System;

class MyClass
{
    private int MyInt;

    public int MyProperty 
    { 
        get { return MyInt; }
        set { if (value >= 0) MyInt = value; else MyInt = 100; }
    }
}

class Program
{
    static void Main()
    {
        MyClass obj = new MyClass();

        obj.MyProperty = 2009;
        Console.WriteLine(obj.MyProperty); //2009

        obj.MyProperty = -1;
        Console.WriteLine(obj.MyProperty); //100

        Console.ReadKey();
    }
}

 
 
 
 
 

 

 

  

只读属性:
using System;

class MyClass
{
    private int MyInt = 100;

    public int MyProperty 
    { 
        get { return MyInt; }
    }
}

class Program
{
    static void Main()
    {
        MyClass obj = new MyClass();

        Console.WriteLine(obj.MyProperty); //100

        Console.ReadKey();
    }
}

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2009/01/02/1366958.html

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
TypeScript - Classes

简介 JavaScript语言基于函数和原型链继承机制的方式构建可重用的组件。这对于OO方面编程来说显得比较笨拙。在下一代的JavaScript标准ECMAScript 6为我们提供了基于class base的OO设计方式。...

zting科技
2017/01/10
0
0
初试刀 浅谈Java和C#在面向对象上语法的区别

 做了几年了开发一直没有总结什么,回到了家乡的小城做了一名培训班的教员,教授软件开发的知识。细小的知识从头细细嚼来,别有一番滋味。或是以前遗漏的太多,或是确实没有系统的学习过,教...

夜默
2013/06/18
48
0
C#中字段、属性、只读、构造函数赋值、反射赋值的相关

C#中字段、属性和构造函数赋值的问题 提出问题 首先提出几个问题: 1、如何实现自己的注入框架? 2、字段和自动属性的区别是什么? 3、字段和自动属性声明时的直接赋值和构造函数赋值有什么区...

GetPower
2018/08/12
0
0
C#与C++的区别总结

从语法上看,C#吸收了VB,C++,Java等语言的优点,改进了不足,加入了大量实用特性。C#确实是优秀的语言,海神也让人敬仰(这大爷一把年纪还是以写代码为乐趣)。 本篇没有高级语法部分,只有...

老G
2017/06/18
0
0
【C#进阶】委托那些事儿(一)

一、简单的委托 1.1  委托的声明:   C#当中,委托(delegate)是一种方法封装,也即委托对象可以作为一种传递方法的变量来使用。   委托也算是一种类,与类是平级的存在。在类中写del...

Carcar019
03/06
0
0

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
26分钟前
3
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
33分钟前
3
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
40分钟前
4
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
42分钟前
3
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
43分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部