【.NET】【基础】

bin\Debug
    “项目名称.exe.config”:        项目实际使用的配置文件,在程序运行中所做的更改都将被保存于此;
    “项目名称.vshost.exe.config”: 原代码“app.config”的同步文件,在程序运行中不会发生更改。
//托管代码可以使用 System.Configuration 命名空间中的类从配置文件中读取设置,但不可以使用 System.Configuration 向这些文件写入设置。
    System.Configuration.ConfigurationSettings.AppSettings["keyname"]

AssemblyInfo.cs//是关于本程序集(一般是dll)的一些信息,主要都是Attribute(特性),用来记录本程序集的版权,公司,以及自已可以定义的一些信息

Control //类表示类的基类 用户界面 (UI) 元素,使用 ControlTemplate 来定义其外观。 
    ContentControl //表示包含任何类型的单项内容的控件。。
        UserControl //类提供创建的控件的简单方法。
M V VM
    M:    在前端页面中,把Model用纯JavaScript对象表示,    
    V:    View负责显示,两者做到了最大限度的分离。    
    VM:   把Model和View关联起来的就是ViewModel。ViewModel负责把Model的数据同步到View显示出来,还负责把View的修改同步回Model。
    
ORM工具 Entity Framework 与 NHibernate比较:    
    1) Entity Framework封装性更好,增、删、改、查询更方便
    2) Entity Framework使用更方便的Linq to Entity查询,延迟加载(只有在需要时才加载,只加载需要的数据) 。
    
动态链接库
    (Dynamic Link Library 或者 Dynamic-link Library,缩写为 DLL) ,是微软公司在微软Windows操作系统中,实现共享函数库概念的一种方式。
    这些库函数的扩展名是 ”.dll"、".ocx"(包含ActiveX控制的库)或者 ".drv"(旧式的系统驱动程序)。
    动态链接库文件,是一种不可执行的二进制程序文件


管理信息系统(Management Information System,简称MIS)

数据字典 (数据库的中心,存放在SYSTEM表空间中)
是一组只读的表,存放有数据库所用的有关信息(表、视图、簇、及索引等。分配多少空间,当前使用了多少空间等。列的缺省值。约束信息的完整性。用户的名字。用户及角色被授予的权限。用户访问或使用的审计信息。其它产生的数据库信息)

BI(商业智能,很炫酷的界面的那种)
RPC(远程过程调用)
NAT(网络地址转换)
ACL(访问控制列表)

 public interface Application : _Application  // _Application是有内容的接口,Application 是无内容的接口
 dynamic this[object Index] { get; }	//可以 对象[索引] 来取值
 dynamic get_Value(object RangeValueDataType);//可以 对象[索引] 来取值

VSTO(Visual Studio Tools for Office )是VBA的替代,使得开发Office应用程序更加简单,就是使用C#来开发office插件
    1.适用于整个excel窗体的插件  2.适用于某个sheet的插件



数据透视表:对excel表进行自动分类统计

dynamic关键字,一般而言,动态语言在编译时不会对类型进行检查,而是在运行时识别对象的类型,由于编译时不会去检查类型,所以导致IDE的IntellSense失效System.__ComObject

OLE VBX OCX ActiveX
    OLE :控件的本质是微软公司的 对象链接和嵌入(OLE) 标准
    .OCX: (OLE Control Extension),类似.DLL
    .VBX:(Visual Basic Extension)Visual Basic文件扩展名
    ActiveX: 网页中的OCX,并称其为ActiveX控件
COM:作为ActiveX的更新技术,扩展名.dll
用C++和VB开发可以生成OCX或COM组件,但是用C#只能生成COM组件。

互操作: 让受管代码对象和非受管对象协同工作的过程称为互用性(interoperability),通常简称为 interop

托管代码:就是中间语言,运行在CLR上
非托管代码:被编译为机器码,运行在机器上

ASP即Active Server Pages



int[a, b]才是二维数组
int[][]称为数组的数组

文本框不换行:\n改为\r\n

记录某段代码运行的所需时间
using System.Diagnostics;
Stopwatch的Start方法	Stopwatch的Stop方法	
Elapsed属性以时分秒的形式,ElapsedMilliseconds是以毫秒的形式保存了时间。

@"字符串"	让字符串不转义

方法为IEnumerable<string>类型时用yield return,

让函数不只返回一个结果
out 关键字通过引用传递参数。 它与 ref 关键字相似,只不过 ref 要求在传递之前初始化变量
ref 关键字指示按引用传递的值
params 关键字可以指定采用数目可变的参数的方法参数。
声明:Fun(params object[] list)  
调用:Fun(1, 'a', "test");

catch (System.Exception ex)
    MessageBox.Show("Error: " + ex.Message);}

控制台
MessageBox.Show("message");
Console.WriteLine("输入 的值");
string arg=Console.ReadLine();
Convert.ToDouble(Console.ReadLine()); 
防止控制台瞬间就没了:
Console.ReadKey(); //等待按下按键	或者		Console.ReadLine();

字符串
string[] arrTemp = "abc,abcd,abcdef,abcdefg,abcdefgh".Split(',');
C#6.0版本即vs2015可以这样取值Console.WriteLine($" {names.Count}");//name是一个list泛型

列表数组
//创建一个list<string>对象Cats
List<string> Cats= new List<string>();

//为Cats添加项
Cats.Add("Cat1");
Cats.Add("Cat2");
Cats.Add("Cat3");
清空数组>>>Array.Clear 
 动态数组ArrayList,一般用List<类型>比较好
double[] balance = new double[10];
double[] balance = { 2340.0, 4523.69, 3421.0};

Hashtable ht = new Hashtable();
ht.Add("001", "Zara Ali");
ht[键];

可空函数参数
public void Function(double a=null)

特性
用特性标注代码已过期
[Obsolete("ThisClass is obsolete. Use ThisClass2 instead.")]
public class ThisClass//特性只作元数据之用。 不借助一些外在力量,特性其实什么用也		没有。若要查找并使用特性,通常需要使用反射


抽象类的抽象方法必须实现

访问级别
public任意
默认:internal只可以被本组合体(Assembly)内所有的类存取,其编译后的文件扩展名往往是“.DLL”或“.EXE”。 
protected internal唯一的一种组合限制修饰符,它只可以被本组合体内所有的类和这些类的继承子类所存取。 
protected本类,继承类
private本类
sealed 修饰符可阻止其他类继承自该类

六种类型对话框:
文件打开对话框、文件保存对话框
字体选择对话框、颜色选择对话框
打印机设置对话框、文件打印预览对话框
文件夹选择对话框:
 FolderBrowserDialog dialog = new FolderBrowserDialog(); 
 dialog.Description = "请选择文件夹”;
 if (dialog.ShowDialog() == DialogResult.OK)  {string foldPath = dialog.SelectedPath;}

static 静态初始化块 实现 单例模式:(该块只会被调用一次)

using语句::
当在某个代码段中使用了类的实例,而希望无论因为什么原因,只要离开了这个代码段就自动调用这个类实例的Dispose。 

bool? Fun() : 该函数可以返回true false null

default(对象) :返回对象未初始化时的默认值

在catch中使用 throw;  //继续抛出异常给调用它的方法

Dictionary<Tkey,Tvalue>是Hastbale的泛型实现。 (都是键值对)

特性
可向程序中添加元数据。元数据是有关在程序中定义的类型的信息。所有的 .NET 程序集都包含指定的一组元数据,这些元数据描述在程序集中定义的类型和类型成员。可以添加自定义特性,以指定所需的任何附加信息。

EventHandler(delegate类型,用于传递方法)
 this.Load += new System.EventHandler(this.Form1_Load);

订阅
publisher.RaiseCustomEvent += HandleCustomEvent;
等同于
publisher.RaiseCustomEvent += new CustomEventHandler(HandleCustomEvent);

退订
 publisher.RaiseCustomEvent -= HandleCustomEvent;

委托:把函数当参数用(把我的函数当参数传给你用)
delegate 函数的返回类型 委托的名字(要委托的方法的参数)
调用
new  委托的名字(要委托的方法的名字);

new Thread(委托);
new Thread(new ThreadStart(	delegate(){}	)); 等同于
new Thread(new ThreadStart(	()=>{}	));
lambda 表达式:(参数) => 函数体

Linq:语言集成查询3.5或者更高版本
var result =from p in ints数组 where p % 2 == 0 select p;
1) from 临时变量 in 实现IEnumerable<T>接口的对象  where条件表达式 [orderby 条件]  [group by 条件] select 临时变量中被查询的值
2) 实现IEnumerable<T>接口的对象.LINQ方法名(lambda表达式)。如:
string input = "hello world";
int count = input.Count(w=>w == 'o'); //查询字母o出现的次数
注意:能够使用LINQ的对象需要实现IEnumerable<T>接口。并且LINQ的查询表达式是在最近一次创建对象时才被编译的。
eg:
from s in Students where s.id<10 && s.Name.Length<10 orderby s.Name select new{s.id,s.Name}
<==>Students.Where(s=>(s.id<10&&s.Name.Length<10)).OrderByDescending(o=>s.Name).Select(o=>new{o.id,o.Name})

 class A<T> where T:new()
这是类型参数约束,where表名了对类型变量T的约束关系。where T:A 表示类型变量是继承于A的,或者是A本省。where T: new()指明了创建T的实例应该使用的构造函数。
  .NET支持的类型参数约束有以下五种:
  where T: struct                                     T必须是一个结构类型
  where T: class                                       T必须是一个类(class)类型,不是结构(structure)类型
  where T: new()                                      T必须要有一个无参构造函数
  where T: NameOfBaseClass                     T必须继承名为NameOfBaseClass的类
  where T: NameOfInterface                      T必须实现名为NameOfInterface的接口



组件,对象,客户端和服务器
COM使用全球唯一的标识符(GUID)
    客户端请求COM对象的服务。
    SCM通过搜索类ID(GUID)来查找请求的对象注册表项。
    DLL被定位并加载到内存中。SCM调用DllGetClassObject中的函数,将必要的类作为第一个参数传递。
        函数DllGetClassObject是使DLL成为COM DLL的函数。其他函数,如DllRegisterServer和DllUnregisterServer,对于DLL作为COM DLL来说是很好的,但不是必须的。
    类对象通常实现接口IClassFactory。SCM在此接口上调用方法CreateInstance以将适当的对象实例化到内存中。
    最后,SCM向新创建的对象请求客户端请求的接口,并将该接口传递回客户端。在这个阶段,供应链管理退出了等式,客户和对象直接通信。
    从前面的一系列步骤中,很容易想象对象的打包(DLL与EXE)中的更改对对象的客户端没有什么影响。COM处理这些差异。


Primary Interop Assemblies(PIA)

每个组件都有一个独一无二的标识GUID。
接口的GUID称为IID
组件类的GUID称为CLSID,CLSID还有一个文本别名,即所谓的ProgID,它是一个由项目名加组件类类名组成的字符串。

防止DLL灾难(版本问题)
    强命名程序集:.Net使用Name、Version、Culture、PublicToken四个属性来唯一标识一个程序集。创建一个强命名程序集需要获得一个用强命名实用工具(Strong Name Utility,即SN.exe)产生的密钥。
    全局程序集缓存(GAC): 这个已确知的目录称作GAC,C:\Windows\Assembly\ , 使用gacutil.exe命令可以将具有强命名的程序集添加到全局程序集缓存。
    
COM Model组件,控件 .NET Model对应的名字
Type libraries Metadata
DLL Assemblies
Interface based Object based
GUIDs Strong names
QueryInterface Cast
Reference counting Memory management(Garbage collection)
Registry Global Assembly Cache (gacutil.exe可以将具有强命名的程序集添至全局程序集缓存)


COM对象的接口一旦被公布,就不能再修改,但可以增加新接口,在ArcObjects中有很多以“2”、“3”结尾的接口,都是这样发展的产物

EXE或DLL文件包括中间语言MSIL代码、元数据和一个文件清单。
    清单则列出了程序集中的所有文件和软件组件,同时指出了CLR在哪里可以找到应用程序运行时需要的其它组件。






//WPF的单例模式(APP中 启动MainWINDOW)
        //我们很自然还是联想到了原先在Windows Forms时代的WindowsFormsApplicationBase,那里面做这个事情太简单了。
        //首先,添加Microsoft.VisualBasic的引用
        namespace WpfApplication1
        {
            public class EntryPoint
            {
                [STAThread]
                public static void Main(string[] args)
                {
                    SingleInstanceManager manager = new SingleInstanceManager();
                    manager.Run(args);
                }
            }
        
        
        
        //使用VB位检测单个实例并进行相应处理:
             // *第一个实例加载时会触发OnStartup
             // *再次重新运行应用程序时会触发OnStartupNextInstance
             //注意:由于IsSingleInstance,它被重定向到这个实例
            public class SingleInstanceManager : WindowsFormsApplicationBase
            {
                SingleInstanceApplication app;
        
                public SingleInstanceManager()
                {
                    this.IsSingleInstance = true;
                }
        
                protected override bool OnStartup(Microsoft.VisualBasic.ApplicationServices.StartupEventArgs e)
                {
                    // First time app is launched
                    app = new SingleInstanceApplication();
                    app.Run();
                    return false;
                }
        
                protected override void OnStartupNextInstance(StartupNextInstanceEventArgs eventArgs)
                {
                    // Subsequent launches
                    base.OnStartupNextInstance(eventArgs);
                    app.Activate();
                }
            }
        
            public class SingleInstanceApplication : Application
            {
                protected override void OnStartup(System.Windows.StartupEventArgs e)
                {
                    base.OnStartup(e);
        
                    // Create and show the application's main window
                    //MainWindow window = new MainWindow();
                    Window1 window = new Window1();
                    window.Show();
                }
        
                public void Activate()
                {
                    // Reactivate application's main window
                    this.MainWindow.Show();
                    this.MainWindow.Activate();
                }
            }
        } 

SqlConnection(connectionString).Open();
通过 DataAdapter 使用数据源中的数据生成和填充 DataSet 中的每个 DataTable。adapter.TableMappings.Add("Table", "Suppliers");
                SqlCommand command = new SqlCommand("SELECT SupplierID, CompanyName FROM dbo.Suppliers;",connection);
                command.CommandType = CommandType.Text; adapter.SelectCommand = command;
                DataSet dataSet = new DataSet("Suppliers");  adapter.Fill(dataSet);
DataSet由一组 DataTable 对象组成
DataTable	table.Columns.Add(column);
DataColumn 
DataRow 
string 值=dt.Rows[0]["column1"].ToString();
//选择column0列值为"李四"的行的集合
DataRow[] drs = dt.Select("column0 = '李四'");
DataRow[] matches = dt.Select("id<'003' and name='名字11'");
string strName = matches[0]["name"].ToString();
取得某一列的值到list,用DataRow!!!!!!!!!!!!!
ArrayList list= new ArrayList();
foreach (DataRow row in datatable.Rows)
{
   list.Add(row["课程编号"].ToString());
}



IDisposable 接口提供释放非托管资源的机制。
非托管资源:就是非.NET平台框架的资源,比如,连接数据库,操作Office等.NET里的平台互操作都是非托管资源。这些资源用完都要立即释放掉的。
非托管,需要明确的释放系统资源(内存)等操作。比如你读取文件,之后需要对各种Stream进行Close等操作。比如 SqlDataReader 读取数据完毕之后,需要 reader.close();等
using 语句提供可确保正确使用 IDisposable 对象的方便语法。
using (Font font1 = new Font("Arial", 10.0f)) 
{
    byte charset = font1.GdiCharSet;
}
等同于
{
  Font font1 = new Font("Arial", 10.0f);
  try
  {
    byte charset = font1.GdiCharSet;
  }
  finally
  {
    if (font1 != null)
      ((IDisposable)font1).Dispose();
  }
}

mysql	用户名 root 密码 1234 
postgres	用户名 postgres 密码1234
Oracle 	SYSTEM 123456

jdbc:postgresql://localhost:5432/database

myeclipse中的反向工程:由数据表 自动生成 hbm配置文件


hkey_local_machine //包含本机的配置信息。其中config子树是显示器打印机信息; enum子树是即插即用设备信息;system子树是设备驱动程序和服务参数的控制集合;software子树是应用程序专用设置。
hkey_classes_root //键包含的文件名扩展名关联和COM类注册信息,是从 hkey_local_machine/software/classes复制的。
hkey_current_config //包含常被用户改变的部分硬件软件配置,如字体设置、显示器类型、打印机设置等。是从hkey_local_machine/config复制的。
hkey_users //所有登录用户信息。
hkey_current_user //包含登录的用户配置信息,是从hkey_users/当前用户子树复制的。

文件扩展名
    类注册和文件扩展名信息存储在HKEY_LOCAL_MACHINE和HKEY_CURRENT_USER键下。
         HKEY_LOCAL_MACHINE\Software\Classes //下项包含可应用于所有用户在本地计算机上的(默认设置)。
        HKEY_CURRENT_USER\Software\Classes //下键包含仅适用于交互式用户设定。(优先级更高)
        HKEY_CLASSES_ROOT //显示的是两者合并的视图

如果程序集是32位的,而机器是64位的
    RegistryKey会默认转向HKLM>Software>Wow6432Node下面去找相关节点,而不是在Software下面找,
    WOW64是x86仿真器,允许32位基于Windows的应用程序在64位Windows上无缝运行
32位进程无法加载64位DLL以执行,而64位进程无法加载32位DLL以供执行
    HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion

 

参与评论 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

CHENJIAMIAN PRO

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值