饮水思源:金老师的自学网站

类的属性

字段+get/set方法=属性

(之前都是把字段和属性混着用。。)

经典写法:

using System;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var x = new MyTest();
x.MyValue = "hello";
Console.WriteLine(x.MyValue);
// => hello --2019/5/1 10:12:49
Console.ReadKey();
}
} // 默认为internal,程序集内可调用
// 如果是public,那就是公共的了,任何程序集都可以去调用到它
public class MyTest
{
// 属性的经典实现方法
private string _myValue = "";
public string MyValue
{
get
{
return _myValue;
}
set
{
_myValue = value + " --" + DateTime.Now;
}
} }
}

自动实现属性(编译器会自动添加一个私有字段):

    class Program
{
static void Main(string[] args)
{
var x = new MyTest();
x.MyValue = "hello";
Console.WriteLine(x.MyValue);
// => hello
Console.ReadKey();
}
} public class MyTest
{
public string MyValue
{
get;
set
;
}
}

其它玩法(来自原PPT截图):

简化字段/属性的初始化

using System;
using System.Collections.Generic; namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var x = new MyTest()
{
MyValue = "hello"
}; // 不用专门去写构造器的,但是没法直接设置对象的私有字段。
Console.WriteLine(x.MyValue); var objs = new List<MyTest>{
new MyTest { MyValue = "Hello" },
new MyTest { MyValue = "World" }
}; // 直接初始化集合对象 // => hello
Console.ReadKey();
}
} public class MyTest
{
private string aPrivateValue; public string MyValue
{
get;
set;
}
}
}

命名空间

类似于Java里的package,允许嵌套

using ConsoleApp1.InnerNamespace;
using System; namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
var x = new MyTest()
{
MyValue = "hello"
}; // 不用专门去写构造器的,但是没法直接设置对象的私有字段。
Console.WriteLine(x.MyValue);
// => hello
Console.ReadKey();
}
} namespace InnerNamespace
{
public class MyTest
{
private string aPrivateValue; public string MyValue
{
get;
set;
}
}
}
}

程序集

基本概念(拷贝自PPT):

  • .NET程序的基本构造块是“程序集(Assembly)” 。
  • 程序集是一个扩展名为.dll或.exe的文件。
  • .NET Framework中的各个类,存放在相应的程序集文 件中。

定义自己的程序集(创建一个类库项目,编译成ddl):

namespace MyDdl1
{
public class MathOpt
{
public static int add(int a, int b)
{
return a + b;
}
}
}

引用自己的程序集(引用ddl):

using MyDdl1;
using System; namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
int result = MathOpt.add(, );
Console.WriteLine(result); // => 3
}
}
}

C sharp #003# 面向对象编程基本构件的更多相关文章

  1. JAVA的面向对象编程--------课堂笔记

    面向对象主要针对面向过程. 面向过程的基本单元是函数.   什么是对象:EVERYTHING IS OBJECT(万物皆对象)   所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么 ...

  2. JAVA的面向对象编程

    JAVA的面向对象编程 面向对象主要针对面向过程. 面向过程的基本单元是函数. 什么是对象:EVERYTHING IS OBJECT(万物皆对象) 全部的事物都有两个方面: 有什么(属性):用来描写叙 ...

  3. Go语言基础之面向对象编程中

    1 Golang面向对象编程基本介绍 Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其它OPP语言不一样,随后分别介绍Golang对面向对象编程的三大特性是如何实现的. 2 ...

  4. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  5. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  6. PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程

    PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...

  7. Delphi_09_Delphi_Object_Pascal_面向对象编程

    今天这里讨论一下Delphi中的面向对象编程,这里不做过多过细的讨论,主要做提纲挈领的描述,帮助自己抓做重点. 本随笔分为两部分: 一.面向对象编程 二.面向对象编程详细描述 ------------ ...

  8. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  9. 面向对象编程(OOP)

    什么是面向对象编程,对于面向对象编程与面向过程编程的解释随处可见,个人认为对面向对象编程解释最好的一个定义是:依赖倒转原则是面向对象编程的标志,面向对象编程是一种思想,无论使用哪一种编程语言,如果在编 ...

随机推荐

  1. NETCore 调试

    https://www.cnblogs.com/MingQiu/p/8227644.html https://www.cnblogs.com/shumin/p/9967854.html 前言 core ...

  2. 2019.03.20 读书笔记 as is 以及重写隐式/显示

    强转.as is 的用法 强制转换类型有两种:子类转基类,重写隐式(implicit )\显示(explicit) 转换操作符 class myclass { private int value; p ...

  3. LISP语言学习资源

    LISP的介绍:Paul Graham 的主页 http://paulgraham.com/index.html Lisp之根源 - 保罗·格雷厄姆 http://daiyuwen.freeshell ...

  4. Big Data Opportunities and Challenges(by周志华)论文要点

    大数据环境下的机器学习 三种误解:模型不再重要(大量数据上复杂模型依然提升显著,大数据是的复杂模型充分利用数据且难以过拟合),相关性就足够了(因果关系重要性无法被替代),以前的研究方向不再重要(高性能 ...

  5. 关于TCP 半连接队列和全连接队列

    关于TCP 半连接队列和全连接队列 http://jm.taobao.org/2017/05/25/525-1/ 发表于 2017-05-25   |   作者   蛰剑     |   分类于 网络 ...

  6. 性能测试工具Jmeter05-badboy检查点与参数化

    检查点设置 选择要检查的文字,然后在Tools->Add Assertion for Selection里添加断言,在进行回放    参数化 在请求搜索关机键字的部分进行参数化 选中搜索关键字- ...

  7. [转]js 判断js函数、变量是否存在

    本文转自:http://blog.csdn.net/liang4571231/article/details/4042519 在进行js编程时,总会出现可能一些函数或者变量未定义而被引用,导致报错的情 ...

  8. (转)DNS原理及其解析过程

    DNS原理及其解析过程原文:http://blog.51cto.com/369369/812889 网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能 ...

  9. Ruby on Rails 中你使用了Kaminari 后,千万不要再引入will_pagination 这个Gem 了

    今日做开发的时候发现的这个问题 发现无论怎样配置都不能使用Kaminari 的Per 这个功能,分页大小也固定在了30 最开始还以为是Ransack 这个Gem 影响的,上网搜了很久发现没有 最后仔细 ...

  10. 用一层for循环初始化三维数组

    ][][]; ; i < * * ; i++) { a[i / ][(i / ) % ][i % ] = i; printf(, (i / ) % , i % ); // printf(&quo ...