关键字:
let
关键字
在查询表达式中,存储子表达式的结果有时很有帮助,可在后续子句中使用。 可以通过 let
关键字执行此操作,该关键字创建一个新的范围变量并通过提供的表达式结果初始化该变量。 使用值进行初始化后,范围变量不能用于存储另一个值。 但是,如果范围变量持有可查询类型,则可以查询该变量。
示例
以两种方式使用以下示例 let
:
-
创建一个可以查询其自身的可枚举类型。
-
使查询仅调用一次范围变量
word
上的ToLower
。 如果不使用let
,则不得不调用where
子句中的每个谓词的ToLower
。
C#复制
class LetSample1
{
static void Main()
{
string[] strings =
{
"A penny saved is a penny earned.",
"The early bird catches the worm.",
"The pen is mightier than the sword."
};
// Split the sentence into an array of words
// and select those whose first letter is a vowel.
var earlyBirdQuery =
from sentence in strings
let words = sentence.Split(' ')
from word in words
let w = word.ToLower()
where w[0] == 'a' || w[0] == 'e'
|| w[0] == 'i' || w[0] == 'o'
|| w[0] == 'u'
select word;
// Execute the query.
foreach (var v in earlyBirdQuery)
{
Console.WriteLine("\"{0}\" starts with a vowel", v);
}
// Keep the console window open in debug mode.
Console.WriteLine("Press any key to exit.");
Console.ReadKey();
}
}
/* Output:
"A" starts with a vowel
"is" starts with a vowel
"a" starts with a vowel
"earned." starts with a vowel
"early" starts with a vowel
"is" starts with a vowel
*/
abstract
关键字
abstract 修饰符指示所修饰的内容缺少实现或未完全实现,可用于类、方法、属性、索引器和事件。一般没有加abstract修饰的即默认为virtual。
一、abstract修饰的类叫抽象类,抽象类中的内容因缺少实现或未完全实现,因此不能生成对象实例,只能用于其他类的基类或做为对象变量声明的类型,且抽象类中的成员则必须通过由该抽象类派生的类来实现,即通过子类继承并覆盖抽象类中的抽象方法。
抽象类的特性:
abstract class ShapesClass { abstract public int Area(); }
1、抽象类不能实例化。
2、抽象类可以包含抽象方法和抽象访问器。
3、不能用 sealed(C# 参考)修饰符修改抽象类,这意味着抽象类不能被继承。
4、从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。
二、abstract修饰的方法即抽象方法。
public abstract void MyMethod();
抽象方法的特性:
1、抽象方法是隐式的虚方法。
2、只允许在抽象类中使用抽象方法声明。
3、因为抽象方法声明不提供实际的实现,所以没有方法体;方法声明只是以一个分号结束,并且在签名后没有大括号 ({ })。
4、实现由一个重写方法提供,此重写方法是非抽象类的成员。
5、在抽象方法声明中使用 static 或 virtual 修饰符是错误的。
三、abstract修饰的属性即抽象属性。
抽象属性的特性:
1、在静态属性上使用 abstract 修饰符是错误的。
2、在派生类中,通过包括使用 override 修饰符的属性声明,可以重写抽象的继承属性。