C# Programming Study #1
- 引用的时候需要在参数和使用的时候加上 ref 关键字
static bool addnum (ref int val) //引用
{
++val;
return true;
}参数数组的概念,可以接受该类型的数组,不限制大小,关键字 params
static int getlength (params int[] vals) //参数数组
{
int sum = 0;
foreach (int val in vals)
{
sum += val;
}
return sum;
}输出参数的概念,类似参数数组,不过声明的时候可以不初始化
static int MaxValue (int[] intArray, out int maxIndex) //输出参数
{
int maxValue = intArray[0];
maxIndex = 0;
for (int i = 1; i < intArray.Length; ++i)
{
if (intArray[i] > maxValue)
{
maxValue = intArray[i];
maxIndex = i;
}
}
return maxValue;
}- 委托 delegate : 委托的声明类似函数,但不带函数体,并且要使用 delegate 关键字。委托的声明指定了一个 返回类型 和一个 参数列表
delegate double ProcessDelegate (double param1, double param2); static double Multiply (double param1, double param2)
{
return param1 * param2;
} static double Divide (double param1, double param2)
{
return param1 / param2;
} static void Main(string[] args)
{
ProcessDelegate process;
string input = Console.ReadLine();
if (input.CompareTo("M") == 0)
{
process = new ProcessDelegate (Multiply);
}
else
{
process = new ProcessDelegate(Divide);
}
double param1 = 3.123;
double param2 = 23.12;
Console.WriteLine("{0}", process(param1, param2));
}- 指定类是抽象的 abstract,不能实例化,只能继承,可以有抽象成员
abstract class MyClass1
{ }- 指定类是密封的 sealed, 不能继承
sealed class MyClass2
{ }- 成员定义
- public 成员可以由任何代码访问
- private 成员由类中的代码访问
- internal 成员只能由定义它的程序集内部的代码访问
- protected 成员只能由类或派生类中的代码访问
- 定义方法
- virtual 方法可以重写
- abstract 方法必须在非抽象类的派生类中重写
- override 方法重写了一个基类方法
- extern 方法定义放在其他地方
- 接口实现
- 不允许使用访问修饰符(public, private, protected, internal)
- 接口成员不能包含代码体
- 接口不能定义字段成员
- 接口成员不能使用关键字 static, virtual, abstractm sealed
- 类型定义成员是禁止的
public interface IMyInterface //在类中实现接口
{
void DoSomething();
void DoSomethingElse();
} public class MyClass : IMyInterface
{
public void DoSomething()
{ }
public void DosomethingElse()
{ }
}
- 泛型
- 可空类型
- int? 是 System.Nullble <int>的缩
int? op = 5;
int? result1 = (int)op * 2; //method 1
int? result2 = op.Value * 2; //method 2 int? op1 = null;
int? op2 = 5;
int? result3 = op1 * op2;
- ?? 运算符
op1 ?? op2
op1 == null ? op2 : op1
- 可空类型
- 泛型类 List
-
class Program
{
static void Main(string[] args)
{
List<Animal> animalCollection = new List<Animal>();
animalCollection.Add(new Cow("Tom"));
animalCollection.Add(new Dog("Dave")); foreach (Animal myAnimal in animalCollection)
{
Console.WriteLine(myAnimal.GetName());
}
}
}
-
- 属性的访问器
- 包含与获取(读取或计算)或设置(写)属性有关的可执行语句。访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含。
- get {}
- get 访问器体与方法体相似。它必须返回属性类型的值。执行 get 访问器相当于读取字段的值。以下是返回私有字段 name 的值的 get 访问器:
-
private string name; // the name field
public string Name // the Name property
{
get
{
return name;
}
} - 当引用属性时,除非该属性为赋值目标,否则将调用 get 访问器读取该属性的值。例如:
Employee e1 = new Employee(); ... Console.Write(e1.Name);
// The get accessor is invoked here get 访问器必须在 return 或 throw 语句中终止,并且控制不能超出访问器体。
- set {}
- set 访问器与返回 void 的方法类似。它使用称为 value 的隐式参数,此参数的类型是属性的类型。在下例中,set 访问器被添加到 Name 属性:
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}- 当对属性赋值时,用提供新值的参数调用 set 访问器。例如:
e1.Name = "Joe";
// The set accessor is invoked here 在 set 访问器中对局部变量声明使用隐式参数名 (value) 是错误的。
// property_hiding.cs
// Property hiding
using System;
public class BaseClass
{
private string name;
public string Name
{
get
{
return name;
}
set
{
name = value;
}
}
} public class DerivedClass : BaseClass
{
private string name;
public new string Name // Notice the use of the new modifier
{
get
{
return name;
}
set
{
name = value;
}
}
} public class MainClass
{
public static void Main()
{
DerivedClass d1 = new DerivedClass();
d1.Name = "John"; // Derived class property
Console.WriteLine("Name in the derived class is: {0}",d1.Name);
((BaseClass)d1).Name = "Mary"; // Base class property
Console.WriteLine("Name in the base class is: {0}",
((BaseClass)d1).Name);
}
}Example Code
- get {}
- #region DisaplayName
- #endregion
- 用来注释中间代码 的作用 而且在其他地方用到中间的类和方法 都会有你标注的注释
- 本身不参与编译 还可以缩进代码 方便阅览折叠代码
-
// preprocessor_region.cs
#region MyClass definition
public class MyClass
{
public static void Main()
{
}
}
#endregion
-
C# Programming Study #1的更多相关文章
- C# Programming Study #2
readonly (C# Reference) readonly 关键字是可以在字段上使用的修饰符. 当字段声明包括 readonly 修饰符时,该声明引入的字段赋值只能作为声明的一部分出现,或者 ...
- Linux: bash script
content [toc] bash scripts equivalent bash command to rename a bash variable/command alias fire='fir ...
- 随机生成&部门匹配
整体概况 1.完整程序概况 (1)程序整体构架 (2)生成程序模型 (3)匹配算法模型 (4)生成结果评估 (5)命名规范 (6)先期和后期分工 2.心路历程与对全新的java认识(心得体会篇) (1 ...
- Beginning Scala study note(4) Functional Programming in Scala
1. Functional programming treats computation as the evaluation of mathematical and avoids state and ...
- study notes: high performance linux server programming
1:linux网络API分为:socker地址API,socker基础API,网络信息API 1,socker地址API:包含IP地址和端口(ip, port).表示TCP通信的一端. 2,socke ...
- Programming Learning - Based on Project
Today when taking a bath I got a good idea that it is an efficient and interesting way to learn a ne ...
- Dynamic Programming
We began our study of algorithmic techniques with greedy algorithms, which in some sense form the mo ...
- Case Study: Random Number Generation(翻译教材)
很荣幸,经过三天的努力.终于把自己翻译的教材做完了,现在把它贴出来,希望能指出其中的不足. Case Study: Random Number Generation Fig. 6.7 C++ 标 ...
- PHP Laravel框架入门心得 | How to study PHP Laravel Framework
PHP有不少开发框架,其中比较出名的有Symfony和Laravel. 我说说我最近入门Laravel的感受和学习方法吧. 1.第一个感受是Laravel的社区讨论和学习资源真的是太棒了,中文化也做得 ...
随机推荐
- mysql 批量删除分区
alter table titles drop partition p01; use zabbix; mysql> source drop_par.sql [oracle@oadb mysql] ...
- Installing perl and writing your first perl program in Ubuntu
Installing perl and writing your first perl program in Ubuntu Installing perl and writing your f ...
- spring 资源加载使用说明
Spring 提供了一个强大加载资源的机制,不但能够通过“classpath:”.“file:” 等资源地址前缀识别不同的资源类型,还支持Ant 风格带通配符的资源地址. 首先,我们来了解一下Spri ...
- Android设置Activity背景为透明style
方法一: 通过Theme.Translucent @android:style/Theme.Translucent @android:style/Theme.Translucent.NoTitleBa ...
- JAVA中正則表達式总结
昨天,我的朋友请教我正則表達式.我也好久没有写过正則表達式了,昨天刚好看了下如鹏网创始人杨中科老师关于正則表達式的解说.使我加深了正則表達式的印像.现我把他总结下: 很多语言,包含Perl.PHP.P ...
- 标准C函数库的使用方法
本篇介绍若干经常使用的标准C函数的使用方法,主要介绍stdio(标准输入输出).math(数字函数库).time(时间函数库).stdlib(标准函数库)string(标准字符串函数)等. 最后更新 ...
- svn+ssh
According to official document, svn+ssh is supposed to be somehow faster than apache+dav_svn, howeve ...
- jQeury学习笔记
jQuery 语法: 核心语法: $(selector).action() 美元符号定义 jQuery 选择符(selector)"查询"和"查找" HTML ...
- TreeSet两种比较
TreeSet底层数据结构是二叉树 判断对象是否一致是通过是对象自身有比较的方法,即使类实现Comparable接口,重写compareTo方法,自己定义比较规则, 若是不想用元素本身的比较方法,又不 ...
- News feed
1. Level 1.0 Database Schema: a. User UserID Name Age 1 Jason 25 2 Michael 26 b. Friendship Friendsh ...