C#基础 基本语法2

1、
String myString="A string";
char myChar=myString[1];

String myString="A string";
char[] mychars=myString.ToCharArry();//为了获得一个可写的char数组
foreach(char character in myString)//后面就可以使用myString.Length获取元素的个数
{
Console.WriteLine("{0}",character);
}
2、
String userResponse=Console.ReadLine();
if(userRespose.ToLower()=="yes")
{
//Act on response.
}//这个命令与其他命令一样,并没有真正的改变它的字符串。
如果用户添加了空格怎么样,用string.Trim();命令来处理下在起作用。string.TrimStart();和string.TrimEnd();
//<string>/PadX(<desiredLength>);//从字符串的左边或者右边添加字符,是字符串达到指定长度。
3、删除字符:
char[] trimChars={'','e','s'};
string yserResponse=Console.ReadLine();
usrResponse=uerRespponse.ToLower();
userResponse=userResponse.Trim(trimChars);
if(usrResponse=="y")
{
//Act on response.
}
4、myString="Aligned";
myString=myString.PadLeft(10);//将myString中把3个空格添加到单词Aligned左边,使用与放置包含数字的字符串。
myString="Aligned";
myString=myString.PadLeft(10,'-');//开头加三个短横线
5、由使用自动完成的功能,将string转换成数组
string myString = "This is a test.";
char[] separator = {' '};
string[] myWords;
myWords = myString.Split(separator);//把字符串的每个空格分开,会得到其子字符串,即得到包含单个字符的数组
foreach (string word in myWords)
{
Console.WriteLine("{0}",word);
}
Console.ReadKey();
6、enum color:short
{
Red,Orange,Yellow,Green,blue,Indigo,Violet,Black,White
}//这个枚举类型可以包含256项,如果给枚举项使用重复的值,就可以始终更多的项
7、class Program
{
static void Write()
{
Console.WriteLine("Text output from function.");
}
static void Main(String[] args)
{
Write();
Console.ReadKey();
}
}
8、定义函数static double GetVal()
{
return 3.2//这个返回必须是一个值,还可以是隐式转换类型。
}//return可以用在通过void关键字声明的函数中(没有返回值),如果这么做函数就会立即终止
9、//参数数组的使用,用params定义就可以了,参数可以任意
static int SumVals(params int[] vals)
{
int sum = 0;
foreach(int val in vals)
{
sum += val;
}
return sum;
}
static void Main(string[] args)
{
int sum=SumVals(1,5,2,9,8);
Console.WriteLine("Summed Values ={0}",sum);
}
10、引用参数和值参数
static void ShowDouble(int val)
{
val*=2;
Console.WriteLine("val doubled={0}",val);
}
int myNumber=5;
Console.WriteLine("myNumber={0}",myNumber);
ShowDouble(myNumber);
Console.WriteLine("myNumber={0}",myNumber);//这样输出后都是 5 10 5

static void ShowDouble(ref int val)
{
val*=2;
Console.WriteLine("val doubled={0}",val);
}
int myNumber=5;
Console.WriteLine("myNumber={0}",myNumber);
ShowDouble(ref myNumber);
Console.WriteLine("myNumber={0}",myNumber);//这样输出后都是 5 10 10
用作ref的参数变量有两个限制,函数可能改变引用参数的值,所以必须调用非常量变量。所以不能有常量定义。其次必须是初始化过的变量。
out的用法与ref用法相同,都是在函数定义和函数调用中用作参数的修饰符。
把未赋值的变量用作ref参数是非法的,但是可以把未赋值的变量用作out参数。在函数使用out参数时out参数必须看作未赋值。
11、如果全局变量和局部变量重名,全局变量就会被屏蔽。
若定义全局变量,可以在局部变量中Program.myString.
12、Main()的可选参数args是从应用程序的外部接受信息的方法,这些信息在运行期间指定,其形式是命令行参数。利用args参数可以编写以类似方式工作的控制台应用程序。
13、结构函数
Struct customerName
{
public string firstName,lastname;
}
customerName myCustomer;
myCustomer.firstName="John";
myCustomer.LastName="Franklin";
Console.WriteLine("{0} {1}",mycustomer.firstName,mycustomer.lastname);
----------------------------------------------------------------------------------------
struct customerName
{
public string firstName,lastName;
public string Name()
{
return firstName+" "+lastName;
}
}
customerName myCustomer;
myCustomer.firstName="John";
myCustomer.lastName="Franklin";
Console.WriteLine(mycustomer.Name());//结构函数
14、重载//让多个函数操作不同类型的变量//也可以根据参数的个数来区分
class Program
{
static int MaxValue(int[] intArray)
{
int maxVal = intArray[0];
for (int i = 1; i < intArray.Length;i++ )
{
if (intArray[i] > maxVal)
maxVal = intArray[i];
}
return maxVal;
}
static double MaxValue(double[] doubleArray)
{
double maxVal = doubleArray[0];
for (int i = 1; i < doubleArray.Length;i++ )
{
if (doubleArray[i] > maxVal)
maxVal = doubleArray[i];
}
return maxVal;
}
static void Main(string[] args)
{
int[] myArray = {1,8,3,6,2,5,9,3,0,2};
int maxVal = MaxValue(myArray);
Console.WriteLine("The maximum value in myArray is{0}",maxVal);
Console.ReadKey();
double result=MaxValue//敲这个的时候就会显示两个函数的选择
}
}
15、重载调用值参数和引用参数
static void ShowDouble(ref int val){ }//ShowDouble(ref val);
static void ShowDouble(int val){ }//ShowDouble(val);
-----------------------------------------------------------------------------------------
16、委托,就像选择一个要使用的查件一样,把他们传递给函数委托就可以控制函数的执行。
委托时可以把引用存储为函数的类型,委托的声明类似于函数,但不带函数体。要有deleget关键字
delegate double ProcessDelegate(double paraml,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;//用新的委托类型声明一个变量
Console.WriteLine("Enter 2 numbers sparated with a comma:");
string input = Console.ReadLine();
int commaPos = input.IndexOf(',');
double param1 = Convert.ToDouble(input.Substring(0,commaPos));
double param2 = Convert.ToDouble(input.Substring(commaPos+1,input.Length - commaPos - 1));
Console.WriteLine("Enter M to myltiply or D to divide:");
input = Console.ReadLine();
if (input == "M")
{
process = new ProcessDelegate(Multiply);
}
else
process = new ProcessDelegate(Divide);
Console.WriteLine("Result:{0}",process(param1,param2));
Console.ReadKey();
17、OOP面向对象编程。非常重要的领域Windows Foems应用程序。
OOP技术以结构、数据的含义以及数据和数据之间的交互操作为基础
UML中myprinter:Printer是Printer的一个实例。
UML中方法,AddSugar(int amount:byte):byte Out和inout大致对应于第六章的Out和ref
18、方法:用于表示对象中的函数,这些函数调用的方式与其他函数相同,使用返回值和参数的方式也相同。<Stirng>.Length和<String>.ToUpper()注意一个属性一个方法。构造对象这个初始化过程称为构造阶段,删除一个对象时,常常要执行一些清理工作,例如释放内存由析构函数完成。
19、使用new关键字来调用构造函数
CupOfCoffee myCup= new CupOfCoffee();
使用非默认的函数创造对象
CupOfCoffee myCup=new CupOdCoffee("Blue Mountain");
//在类外部的代码不能使用私有构造函数实例化对象。
20、析构函数:一般不需要析构函数的代码,而由默认的析构函数自动执行。但不能依赖析构函数释放对象实例使用的资源,因为不在使用某个对象后,该资源会长时间被该对象占用。
21、Console.WriteLine();或者Convert.ToString();方法是静态的,根本不需要实例化,因为这些构造函数是不可公共访问的。静态成员可以在类的实例之间共享,所以可以将他们看做是类的全局对象,,静态属性、静态字段可以访问独立于任何对象实例的数据,静态方法可以执行与对象类型相关、但与对象实例无关的命令。在使用静态成员时,甚至不需要实例化对象。在UML中类的静态成员用下划线表示。
21、使用类的静态成员时,要预先初始化这些成员,在声明时,可以给静态成员提供一个初始值,有时需要执行更复杂的初始化,或者在赋值、执行某些方法之前执行某些操作。使用静态构造函数可以执行此类的初始化任务,一个类只能有一个静态构造函数,该构造函数不能有访问修饰符,也不带任何参数,静态构造函数不能直接调用。只能在下列情况执行:
创建包含静态构造函数的类的实例时
访问包含静态构造函数的类的静态成员时
22、接口是把公共实例(非静态)方法和属性组合起来,以封装特定功能的一个集合,一旦定义了一个接口,就可以在类总实现它,这样就可以支持接口所指定的所有属性和成员。咖啡事例中AddSugar()、Milk、Sugar、Instant组合到一个接口中,这个接口称为IHotDrink,然后就可以在其他对象上使用该接口,对象扔保留自己的属性。一个类可以支持多个接口,多个类也可以支持同一个接口。
23、using关键字会在代码块中初始化使用中药资源的对象,会在这个代码块的末尾自动调用Dispose()方法。
using(<VariableName>)
{
...
}
或者把初始化对象作为using语句的一部分
using(<ClassName><VariableName>=new <ClassName>()){}
//在这两种情况下中使用变量,并在代码块的末尾自动删除。自动调用dispose()
24、任何类都可以从另一个类中继承,这个类拥有他继承的类的所有成员、C#中的对象仅能直接派生于一个基类,当然基类也可以有自己的基类。
25、一个成员只能由基类和派生类访问而不能由外部代码访问。protected只有派生类才能访问protected成员,对于外部代码这个可访问性与私有成员一样:外部代码不能访问private和protected成员。,
26、基类的成员可以是虚拟的,也就是成员可以由继承他的类重写。派生类可以提供成员的其他的实现代码,这种实现代码不会删除原来的代码,仍可以在类中访问原来的代码,但外部代码不能访问他们,如果没有提供其他的实现方式,通过派生类使用成员的外部代

原文地址:https://www.cnblogs.com/d685600/p/3650359.html