NET(c#)new关键字的三种用法
- 格式:doc
- 大小:51.50 KB
- 文档页数:6
.Net(C#)Get和Set的基本用法通常情况下类内部的私有成员变量是无法被直接访问的,但是可以通过两种方法实现访问和设置类内部的私有成员变量。
一种是使用Get(读取或计算),Set(写)来访问类内部的私有成员变量,另一种是通过自己写Public方法来访问类内部的私有成员变量。
示例:private void button1_Click(object sender, EventArgs e){littleCar lc = new littleCar(); //实例化派生类lc.CarRun(); //调用CarRun方法}class carClass{private string carName; //定义私有成员变量 carNamepublic string CarName{get { return carName; } //获取carName的值set { carName = value; } //设置carName的值}public void CarRun(){MessageBox.Show(carName + "is running"); //输出}}class littleCar:carClass{public littleCar(){CarName = "宝马";}}通过Get和Set访问器,程序设置了carName变量的值为“宝马”,并可以进行读取。
示例【2】:private void button1_Click(object sender, EventArgs e){Eample ep = new Eample();MessageBox.Show(ep.MyName);}class Eample{private string myName="张雪逸";public string MyName{get { return myName; }}}运行得到的结果是:张雪逸通常情况下我们是无法直接从外部访问myName的,但是通过Get(读取)我们可以得到myName的值,这个时候MyName = myName。
使⽤.NET命令⾏编译器编译项⽬(如、C#等)源程序最好有.csproj或.vbproj⽂件,没有的话,要花些时间调试下⾯我以做⽰例讲解⼀下:从proj我们可以获取以下有⽤信息Settings⼩节中有很多配置选项,对应⼀些编译器选项<References>⼩节中是项⽬的引⽤,第3⽅类库最好⽤绝对路径<Imports>⼩节中是要导⼊的⼀些命名空间<Files>⼩节中有项⽬的所有⽂件,选取 BuildAction = "Compile"的⽂件⽤vbc测试了⼀下,很容易,注意以下⼏项:rootnamespacereferencetargetimports加上bugreport可以将所有的源⽂件代码和bug报告输出。
不错给你⼀端编译⽰例:vbc /r:System.dll /r:System.Data.dll /r:System.Drawing.dll /r:System.Web.dll /r:System.Xml.dll/r:bin\Microsoft.ApplicationBlocks.Data.dll /r:bin\ExportTechnologies.WebControls.RTE.dll /imports:Microsoft.VisualBasic/imports:System /imports:System.Collections /imports:System.Configuration /imports:System.Data /imports:System.Drawing /imports:System.Web /imports:System.Web.UI /imports:System.Web.UI.HtmlControls /imports:System.Web.UI.WebControls /imports:MMS /rootnamespace:MMS /t:library /out:Truly.MMS.dll /bugreport:bug.log AssemblyInfo.vb Global.asax.vb HDAdd.aspx.vb HDticketLogAdd.aspx.vb MIS.vb PageBase.vb Utils.vb如果没有proj⽂件,那么可以⽤下⾯的命令获取:dir /b *.vb > filelist.txtcsc的使⽤⽅法就靠你⾃⼰去琢磨了。
第1部分 .NET基本概念1.应用程序域:应用程序域可以理解为一种轻量级进程。
起到安全的作用。
占用资源小。
应用程序域提供安全而通用的处理单元,公共语言运行库可使用它来提供应用程序之间的隔离。
开发者可以在具有同等隔离级别(存在于单独的进程中)的单个进程中运行几个应用程序域,而不会造成进程间调用或进程间切换等方面的额外开销。
在一个进程内运行多个应用程序的能力显著增强了服务器的可伸缩性。
2.CTS:通用类型系统。
CTS:类似于COM定义的标准二进制格式,.NET定义了一个称为通用类型系统 Common Type System (CTS)的类型标准。
这个类型不但实现COM的变量兼容,而且还定义了通过用户自定义类型的方式进行类型扩展。
任何类型的方式进行类型扩展。
任何以.NET平台作为目标的语言必须建立它的数据类型与CTS的类型间的影射。
所有.NET语言共享这一类型系统,实现他们之间无缝的互操作。
该方案还提供了语言之间的继承性。
3.CLS:公共语言规范。
.NET通过定义公共语言规范(CLS:Common Language Specification),限制了由这些不同引发的互操作性问题。
CLS指定了一种以.NET平台为目标的语言所必须支持的最小特征,以及该语言与其他.NET语言之间实现互操作性所需要的完备特征。
CLS是CTS的一个子集。
4.CLR:公共语言运行库Common Language Runtime(CLR).CLR是CTS的实现,也就是说,CLR是应用程序的执行引擎和功能齐全的类库,该类库严格按照CTS规范实现。
作为程序执行引擎,CLR负责安全地载入和运行用户程序代码,包括对不同对象的垃圾挥手和安全检查。
CLR监控之下运行的代码,称为托管代码(managed code)。
5.IL(Intermediate Language,中间语言):可用于语言互操作性,IL不是字节代码,但很接近字节代码,因此执行应用程序时,IL到机器代码的转换要快很多。
在英语中,"net" 是一个前缀,常用于构成单词,意味着“网络的”或“互联网的”。
以下是一些常见的以"net" 开头的英文单词:
1. Network -网络,通常指计算机网络或社交网络。
2. Internet -互联网,全球范围内的计算机网络系统。
3. Netscape -曾经的一个网络浏览器名称,也是互联网的景象或景象的意思。
4. Netizen -网络公民,指在互联网上有活跃参与行为的个人。
5. Netiquette -网络礼仪,网络上行为的规范或礼节。
6. Net-zero -净零,指碳排放量为零或能源消耗与产生相平衡的状态。
7. Networth -净资产,个人或公司的总资产减去总负债后的价值。
8. Net income -净收入,个人或公司从经营活动中获得的收入减去费用后的金额。
9. Net gain/loss -净收益/损失,指的是总的收益减去总的损失。
请注意,"net" 作为后缀时,通常用于表示“净”或“总共”的意思,如"gross"(总的)和"loss"(损失)。
在不同的语境中,"net" 的含义可能会有所不同。
C .NET实现PC与PPC的双向通信(C#)是一种通用语言基础架构(CLI)语言,它可以通过.NET Framework在多种平台上实现代码的跨越性。
PC (个人电脑)和PPC(便携式机)之间的双向通信可以使用实现。
首先,我们需要在PC和PPC上安装.NET Framework。
.NET Framework是创建C#应用程序的关键组件。
在.NET Framework下,我们可以使用Windows Communication Foundation(WCF)进行通信。
WCF是一种Microsoft开发的通用编程模型。
它与.NET Framework一起提供,用于构建分布式应用程序。
WCF也支持一些传输协议,如HTTP,TCP和MSMQ等。
在这里,我们将使用TCP协议进行通信。
在PC和PPC上,我们需要创建一个WCF服务和一个WCF 客户端。
服务端将监听传入的连接请求,并通过TCP协议使用套接字在两台计算机之间传递信息。
下面是创建WCF服务的C#代码片段:```using System;using System.Runtime.Serialization;using System.ServiceModel;namespace MyWCFServiceApplication {[DataContract]public class MyDataClass {[DataMember]public int id;[DataMember]public string name;}[ServiceContract]public interface IMyService {[OperationContract]void SendMessage(MyDataClass myData);}public class MyService : IMyService {public void SendMessage(MyDataClass myData) {Console.WriteLine(String.Format("Message Received: {0} {1}", myData.id, ));}}class Program {static void Main(string[] args) {ServiceHost host = new ServiceHost(typeof(MyService)); host.Open();Console.WriteLine("Service host started at " +host.BaseAddresses[0].AbsoluteUri);Console.ReadLine();host.Close();}}}```在这个示例中,我们创建了一个名为“MyService”的服务,并且将它作为实参传递给了ServiceHost构造函数。
汇总最全的C#.NET(数据库.net其它)⾯试题及参考答案⼀、数据库篇1.维护数据库的完整性、⼀致性、你喜欢⽤触发器还是⾃写业务逻辑?为什么?答:尽可能⽤约束(包括CHECK、主键、唯⼀键、外键、⾮空字段)实现,这种⽅式的效率最好;其次⽤触发器,这种⽅式可以保证⽆论何种业务系统访问数据库都能维持数据库的完整性、⼀致性;最后再考虑⽤⾃写业务逻辑实现,但这种⽅式效率最低、编程最复杂,当为下下之策。
2.什么是事务?什么是锁?请说出sql server中锁的隔离级别有哪些,默认是哪⼀种?答:事务是指⼀个⼯作单元,它包含了⼀组数据操作命令,并且所有的命令作为⼀个整体⼀起向系统提交或撤消请求操作,即这组命令要么都执⾏,要么都不执⾏。
锁是在多⽤户环境中对数据的访问的限制。
SqlServer⾃动锁定特定记录、字段或⽂件,防⽌⽤户访问,以维护数据安全或防⽌并发数据操作问题,锁可以保证事务的完整性和并发性。
3.什么是索引,有什么优点?使⽤索引需要注意些什么?答:索引与书的⽬录类似,可以快速定位要查找的数据所有位置,索引使数据库程序⽆需扫描整个表,就可以在其中找到所需要的数据,索引包含了⼀个表中包含值的列表,其中包含了各个值的⾏所存储的位置,索引可以是单个或⼀组列,索引提供的表中数据的逻辑位置,合理划分索引能够⼤⼤提⾼数据库性能。
索引需要注意:加索引的列⼀定要是经常使⽤来条件筛选的列,并且where中要避免对有索引的列进⾏计算,索引并不是越多越好,索引会占⽤更多的存储空间,也会对insert 、update、delete这些操作有⼀定的性能影响。
4.视图是什么?游标是什么?答:视图是⼀种虚拟表,虚拟表具有和物理表相同的功能,可以对虚拟表进⾏增该查操作;视图通常是⼀个或多个表的⾏或列的⼦集;视图的结果更容易理解(修改视图对基表不影响),获取数据更容易(相⽐多表查询更⽅便),限制数据检索(⽐如需要隐藏某些⾏或列),维护更⽅便。
.NET(c#)new关键字的三种用法前几天去家公司面试,有一道这样的题:写出c#中new关键字的三种用法,思前想后挖空心思也只想出了两种用法,回来查了下msdn,还真是有第三种用法:用于在泛型声明中约束可能用作类型参数的参数的类型,这是在Framework 2.0 中定义泛行时才会使用到的,自己对c# 2.0 中的支持还只是粗通皮毛,怪不得累死so many脑细胞也没能想不出这第三种来!三种用法如下:在 C# 中,new 关键字可用作运算符、修饰符或约束。
1)new 运算符:用于创建对象和调用构造函数。
这种大家都比较熟悉,没什么好说的了。
2)new 修饰符:在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。
3)new 约束:用于在泛型声明中约束可能用作类型参数的参数的类型。
关于第二种用法看下例:using System;namespace ConsoleApplication1{public class BaseA{public int x = 1;public void Invoke(){Console.WriteLine(x.ToString());}public int TrueValue{get { return x; }set { x = value; }}}public class DerivedB : BaseA{new public int x = 2;new public void Invoke(){Console.WriteLine(x.ToString());}new public int TrueValue{get { return x; }set { x = value; }}}class Test{static void Main(string[] args){DerivedB b = new DerivedB();b.Invoke();//调用DerivedB的Invoke方法,输出:2Console.WriteLine(b.x.ToString());//输出DerivedB的成员x值:2BaseA a = b;a.Invoke();//调用BaseA的Invoke方法,输出:1a.TrueValue = 3;//调用BaseA的属性TrueValue,修改BaseA的成员x的值Console.WriteLine(a.x.ToString());//输出BaseA的成员x的值:3Console.WriteLine(b.TrueValue.ToString());//输出DerivedB的成员x的值,仍然是:1//可见,要想访问被隐藏的基类的成员变量、属性或方法,办法就是将子类造型为父类,然//后通过基类访问被隐藏的成员变量、属性或方法。
}}}new约束指定泛型类声明中的任何类型参数都必须具有公共的无参数构造函数.请看下例: using System;using System.Collections.Generic;namespace ConsoleApplication2{public class Employee{private string name;private int id;public Employee(){name = "Temp";id = 0;}public Employee(string s, int i){name = s;id = i;}public string Name{get { return name; }set { name = value; }}public int ID{get { return id; }set { id = value; }}}class ItemFactory<T> where T : new(){public T GetNewItem(){return new T();}}public class Test{public static void Main(){ItemFactory<Employee> EmployeeFactory = new ItemFactory<Employee>();////此处编译器会检查Employee是否具有公有的无参构造函数。
//若没有则会有The Employee must have a public parameterless constructor 错误。
Console.WriteLine("{0}'ID is {1}.", EmployeeFactory.GetNewItem().Name, EmployeeFactory.Get NewItem().ID);}}}见MSDN上关于New的解释new 修饰符(C# 参考)在用作修饰符时,new 关键字可以显式隐藏从基类继承的成员。
隐藏继承的成员时,该成员的派生版本将替换基类版本。
虽然可以在不使用 new 修饰符的情况下隐藏成员,但会生成警告。
如果使用 new 显式隐藏成员,则会取消此警告,并记录要替换为派生版本这一事实。
若要隐藏继承的成员,请使用相同名称在派生类中声明该成员,并使用 new 修饰符修饰该成员。
例如:public class BaseC{public int x;public void Invoke() { }}public class DerivedC : BaseC{new public void Invoke() { }}在此示例中,DerivedC.Invoke 隐藏了 BaseC.Invoke。
字段 x 不受影响,因为它没有被类似名称的字段隐藏。
通过继承隐藏名称采用下列形式之一:∙引入类或结构中的常数、指定、属性或类型隐藏具有相同名称的所有基类成员。
∙引入类或结构中的方法隐藏基类中具有相同名称的属性、字段和类型。
同时也隐藏具有相同签名的所有基类方法。
∙引入类或结构中的索引器将隐藏具有相同名称的所有基类索引器。
对同一成员同时使用 new 和override是错误的做法,因为这两个修饰符的含义互斥。
new 修饰符会用同样的名称创建一个新成员并使原始成员变为隐藏的。
override 修饰符会扩展继承成员的实现。
在不隐藏继承成员的声明中使用 new 修饰符将会生成警告。
示例在该例中,基类 BaseC 和派生类 DerivedC 使用相同的字段名 x,从而隐藏了继承字段的值。
该示例演示了 new 修饰符的用法。
另外还演示了如何使用完全限定名访问基类的隐藏成员。
public class BaseC{public static int x = 55;public static int y = 22;}public class DerivedC : BaseC{// Hide field 'x'.new public static int x = 100;static void Main(){// Display the new value of x:// Display the hidden value of x:Console.WriteLine(BaseC.x);// Display the unhidden member y:Console.WriteLine(y);}}/*Output:1005522*/在此示例中,嵌套类隐藏了基类中同名的类。
此示例演示了如何使用 new 修饰符来消除警告消息,以及如何使用完全限定名来访问隐藏的类成员。
public class BaseC{public class NestedC{public int x = 200;public int y;}}public class DerivedC : BaseC { // Nested type hiding the base type members.new public class NestedC{public int x = 100;public int y;public int z;}static void Main(){// Creating an object from the overlapping class:NestedC c1 = new NestedC();// Creating an object from the hidden class:BaseC.NestedC c2 = new BaseC.NestedC();Console.WriteLine(c2.x);}}/*Output:100200*/如果移除 new 修饰符,该程序仍可编译和运行,但您会收到以下警告:The keyword new is required on 'MyDerivedC.x' because it hides inherited member 'MyBaseC.x'.。