SQL语句1

要求:将本机数据库2中表的数据导入到本机数据库1的表中。

方法:使用sqlserver编写如下代码即可:

insert intoSB(SB_ID,YSXZ_ID,XQ_ID,SB_KHH,SB_KHXM,SB_BH,SB_YSRS,SB_DH,SB_DZ,SB_WZ,SB_XH,SB_YE,SB_CJ,SB_DQBDS,SB_ZJCBRQ,SB_BZ,SB_SFYX)

selectSB_ID,YSXZ_ID,XQ_ID,SB_KHH,SB_KHXM,SB_BH,SB_YSRS,SB_DH,SB_DZ,SB_WZ,SB_XH,SB_YE,SB_CJ,SB_DQBDS,SB_ZJCBRQ,SB_BZ,SB_SFYX

from HelperLY.dbo.SB b

注意:数据库1中的表字段与数据库2中的表字段要一一对应。

要求:使用select语句完成功能:利用表达式查询水表中的用水人数和水表位置。

方法:如果直接按照如下写法:

select SB_YSRS +SB_WZ

from SB

会出现错误:在将varchar 值'2#东北' 转换成数据类型int 时失败。

在C#中如果一个int类型的数据和一个string类型的数据进行+运算,则结果返回string类型;但是在SqlServer中,一个int类型的数据和一个char(数据库中没有string类型)类型的数据进行+操作,而不做任何类型转变的话,就会出现错误。

正确的写法应该是:

select convert(varchar(100),SB_YSRS) +SB_WZ

from SB

注意:在数据库中int类型和char类型进行+运算,要进行强制类型转换。

如果两个类型的值进行+运算,且其中有一个值是null类型,则返回结果是null类型。

要求:从SB中查出小区名称中包含“物资”两个字的信息列表。

方法:使用带有in的sql语句如下所示:

select *

from SB

where XQ_ID in

(select XQ_ID from XQ where XQ_MC like '%物资%')

注意:in后面不仅仅可以跟一个条件列表,还可以跟一个sql语句。

要求:区分简单case和布尔case的区别,及其应注意的事项。

方法:如下sql语句是简单case:

select *,

case substring(SB_DH,1,3)

when '151' then '移动'

when '130' then '联通'

else '未知'

end as 电话服务商

from SB

如下sql语句是布尔case:

select *,

case

when substring(SB_DH,1,3) in ('151') then '移动'

when substring(SB_DH,1,3) in ('130') then '联通'

else '未知'

end as 电话服务商

from SB

注意:简单case和布尔case的select语句后面都有逗号,;简单case后面会有一个表达式,但是布尔case后面是空的;简单case只能进行相等比较,布尔case在when后面会有一些简单的判断。

要求:在录入表底数模块中,按照时间选择抄表项的时候,应该选择离目前时间最近的时间,这里会用到sql语句。

方法:sql语句如下所示:

select MAX(CB_ID) from CB WHERE CB_YF=(select MAX(CB_YF) from CB)

注意:要注意本sql语句中where子句的条件:

WHERE CB_YF=(select MAX(CB_YF) from CB)

要求:将水表表和抄表明细表进行关联。

方法:sql语句如下所示:

select a.SB_KHH,a.SB_KHXM,a.SB_YSRS,b.*

from SB a,CBMX b

where a.XQ_ID =34 and b.CB_ID =8 and b.CBMX_BCBDS is not null

and a.SB_ID=b.SB_ID

注意:将两个表的关联放在后面的原因是:两个表的关联比较耗时。某些时候where条件的顺序不同可能会导致查询结果所需时间可以相差十几倍。

SQL语句2

要求:统计每个小区的水量、水费

方法: sql语句如下所示:

select b.XQ_ID,SUM(a.CBMX_BCBDS -a.CBMX_SCBDS) as SL,SUM(a.CBMX_YJSF) as YJSF,

SUM (a.CBMX_SJSF) as SJSF

from CBMX a,SB b

where a.SB_ID =b.SB_ID

group by b.XQ_ID

或者使用下面的sql语句:

select x.*,y.XQ_MC

from

(

select b.XQ_ID,sum(a.CBMX_BCBDS -a.CBMX_SCBDS) as SL, SUM(a.CBMX_YJSF) as YJSF,

SUM (a.CBMX_SJSF) as SJSF

from CBMX a,SB b

where a.SB_ID =b.SB_ID

group by b.XQ_ID

)x,XQ y

where x.XQ_ID=y.XQ_ID

注意:如果使用了group by,那么色了传统中的字符按,要么在group by中出现,要么使用了聚合函数。

要求:显示小区名称、用水人数和水表数量

方法:sql语句如下所示:

select a.XQ_ID,b.XQ_MC, COUNT(a.SB_ID) as SBSL,SUM(a.SB_YSRS) as YSRS

from SB a,XQ b

where a.XQ_ID =b.XQ_ID

group by a.XQ_ID ,b.XQ_MC

注意:count的使用和sum的使用

①如果要求显示水表数量大于100的小区名称和用水人数,则sql语句如下所示:

select a.XQ_ID,b.XQ_MC, COUNT(a.SB_ID) as SBSL,SUM(a.SB_YSRS) as YSRS

from SB a,XQ b

where a.XQ_ID =b.XQ_ID

group by a.XQ_ID ,b.XQ_MC

having COUNT(a.SB_ID)>100

注意:having的使用(在分组的基础之上进一步过滤,过滤的条件是某个聚合的结果)。having之和group by一起使用

②如果要显示用水性质是居民用水的小区名称和用水人数,则sql语句如下所示:

select a.XQ_ID,b.XQ_MC, COUNT(a.SB_ID) as SBSL,SUM(a.SB_YSRS) as YSRS

from SB a,XQ b

where a.XQ_ID =b.XQ_ID and a.YSXZ_ID =1

group by a.XQ_ID ,b.XQ_MC

注意:在条件的过滤之下进行分组

要求:根据SB表中的用水人数分析用水家庭的情况

方法:sql语句如下所示:

select a.SB_KHXM,

case SB_YSRS

when 1 then '可能是一个光棍'

when 2 then '可能是一对夫妻'

when 3 then '可能是一家三口'

when 5 then '可能是两代人住在一起'

else '不能预测'

end 分析结果

from SB a

注意:简单case是相等比较

要求:根据SB表中的用水人数分析用水人数的多或少

方法:sql语句如下所示:

select SB_KHXM,

case

when SB_YSRS<2 then '用水人数比较少'

when SB_YSRS <4 then '用水人数一般'

else '人数比较多'

end 分析结果

from SB

注意:复杂case后面没有表达式

行变列问题

①方法:sql语句如下所示:

select

SUM(case when SB_DH like '131%' then 1 else 0 end) as 联通131,

SUM(case when SB_DH like '134%' then 1 else 0 end) as 联通134,

SUM(case when SB_DH like '138%' then 1 else 0 end) as 移动138,

SUM(case when SB_DH like '151%' then 1 else 0 end) as 移动151

from SB

注意:在本例中给列起别名时,不能使用数字。

②要求:计算平均成绩

方法:sql语句如下所示:

select

AVG

(

case

when Score_Subject ='数学' then Score_FS

else 0

end

) 数学,

AVG

(

case

when Score_Subject='语文' then Score_FS

else 0

end

) 语文

from Score

注意:两个AVG之间使用 , 相隔

SQL语句3

要求:判断两个字符串是否相等。

方法:sql语句如下所示:

if('abc'='Abc')

print '二者相等'

else

print '二者不相等'

返回结果是:二者相等

if('abc'='Abec')

print '二者相等'

else

print '二者不相等'

返回结果是:二者不相等

注意sql中判断两个字符串是否相等时,不区分大小写。

要求:判断某个字符串中是否存在空格。

方法:sql语句如下所示:

if (CHARINDEX(' ','ac dc',1)>0)

print '字符串中包含空格'

else

print '字符串中不包含空格'

返回结果是:字符串中包含空格

if (CHARINDEX(' ','acdc',1)>0)

print '字符串中包含空格'

else

print '字符串中不包含空格'

返回结果是:字符串中不包含空格

要求:计算SB表中sb_dh字段中的数据中3的个数

方法:sql语句如下所示:

select sb_dh,LEN(SB_DH)-LEN(REPLACE(sb_dh,3,'')) from SB

注意:在计算某个字段中包含什么值时,可以使用如下方式:总长度-将目标字符替换成空后的长度。

要求:将SB进行分页时,如果每页放10行,计算可以放多少页

方法:sql语句如下所示:

select CEILING(COUNT(*)/10.0) from SB

注意:在这里使用的是10.0,而不是整数10

要求:保留两位小数位数

方法:sql语句如下所示:

select CONVERT(decimal(18,2),ROUND(18.12345,2))

要求:如果某小区拥有的水表数量是,则显示为0;并显示相应的小区名称。

方法:sql语句如下所示:

select x.XQ_MC,ISNULL(y.水表数量,0)

from XQ x

left join

(

select xq_id,COUNT(SB_ID) as 水表数量

from SB

group by XQ_ID

) y

on x.XQ_ID=y.XQ_ID

要求:找到工资最高的员工

方法:sql语句如下所示:

select * from Employee where Salary =

(select MAX(Salary)

from Employee)

要求:找到每个部门的最低工资的职工

方法:sql语句如下所示:

select * from Employee where Salary in

(select MIN(Salary)

from Employee

group by DepID)

也可以使用如下sql语句:

select x.*,y.*

from Employee x,

(select DepID,MIN(Salary) as minsalary

from Employee

group by DepID) y

where x.DepID=y.DepID and x.Salary=y.minsalary

在上面的基础上显示职工所隶属的部门:

with temp as

(select x.*,y.minsalary

from Employee x,

(select DepID,MIN(Salary) as minsalary

from Employee

group by DepID) y

where x.DepID=y.DepID and x.Salary=y.minsalary

)

select a.*,b.Name

from temp a,Department b

where a.depid=b.depid

要求:查找水表个数低于100的小区

方法:sql语句如下所示:

with temp as

(

select XQ_ID,COUNT(SB_ID) as sbsl

from SB

GROUP by XQ_ID

having COUNT(SB_ID)<100

)

select a.*,b.*

from temp a,XQ b

where a.XQ_ID=b.XQ_ID

SQL 语句4

要求:更新Employee表中的Salary项(条件是:Salary=a.Salary *(1+b.RaiseFactor))

方法:sql语句如下所示:

update Employee

set Salary=a.Salary *(1+b.RaiseFactor)

from Employee a,Department b

where a.DepID=b.DepID

要求:将名字用,隔开

方法:sql语句如下所示:

declare @name varchar(20)

set @name=''

select @name =@name+','+name from Employee

print @name

要求:找到工资大于小叶子工资的员工

方法:sql语句如下所示:

declare @salary money

select @salary=salary from Employee

where Name='小叶子'

select * from Employee

where Salary>@salary

也可以使用如下sql语句完成上述功能:

select *

from Employee

where Salary>

(select Salary from Employee where Name='小叶子')

要求:@@ERROR示例

方法:sql语句如下所示:

insert into Employee(DepID,Name,Salary,DateHire,Address)

values(10,'江户川柯南',1000,' 2010-10-10','河北理工大学')

print '错误号:'+convert(varchar(100),@@error)

insert into Employee(DepID,Name,Salary,DateHire,Address)

values(100,'毛利兰',2000,'2011-11-11','河北理工大学')

print '错误号:'+convert(varchar(100),@@error)

运行结果是:消息547,级别16,状态0,第1 行

INSERT 语句与FOREIGN KEY 约束"FK_Employee_Department"冲突。该冲突发生于数据库"dbXDL",表"dbo.Department", column 'DepID'。

语句已终止。

错误号:

消息547,级别16,状态0,第4 行

INSERT 语句与FOREIGN KEY 约束"FK_Employee_Department"冲突。该冲突发生于数据库"dbXDL",表"dbo.Department", column 'DepID'。

语句已终止。

错误号:

要求:@@identity示例

方法:sql语句如下所示:

insert into Employee(DepID,Name,Salary,DateHire,Address)

values(1,'江户川柯南',1000,'2010-10-10','河北理工大学')

print @@identity

insert Card(UserName,Balance)

values('新一',1000)

print @@identity

运行结果是:(1 行受影响)

21

(1 行受影响)

3

要求:计算员工的平均工资,如果高于2000,显示“高工资”,如果低于2000,则显示“低工资”

方法:sql语句如下所式:

declare @avgSalary money;

select @avgSalary=AVG(salary) from Employee

if(@avgSalary>2000)

begin

print '高工资'

end

else

begin

print '低工资'

end

要求:给员工提高工资,要求都在2000元以上,加工资的规则是:全部加100,看是否满足要求;如果不满足,再加,直到满足要求。

方法:sql语句如下所示:

declare @minSalary money;

select @minSalary=MIN(salary) from Employee

while(@minSalary<2000)

begin

update Employee set Salary=Salary+100;

select @minSalary=MIN(salary) from Employee;

end

也可以使用如下sql语句完成上述功能:

declare @minSalary money;

select @minSalary=MIN(salary) from Employee

while(@minSalary<2000)

begin

update Employee set Salary=Salary+100;

set @minSalary=@minSalary+100;

end

要求:临时表示例

方法:sql语句如下所示:

select * into #EmployeeTemp

from Employee where Salary>2000

select * from #EmployeeTemp

注意:临时表创建完后,当确定不在使用后,应该将其删除,sql语句如下所示:

drop table #EmployeeTemp

posted @ 2011-12-11 12:12 高导 阅读(328) 评论(0) 编辑
摘要: 上一篇文章写得查询比较简单,这次做一个基于MVVM下的增删改。只要按照步骤来,没有不会的。第一步:创建一个silverlight项目;第二步:添加项目对 GalaSoft.MvvmLight.Extras.SL4,GalaSoft.MvvmLight.SL4, System.Windows.Controls.Data, Microsoft.Practices.Unity.Silverlight的引用第三步:创建相应的文件夹ViewModel和Model 和View 。第四步:在Model文件夹下新建一个类Student.cs类,代码如下: public class Student { publ阅读全文
posted @ 2011-07-27 14:45 高导 阅读(1225) 评论(9) 编辑

作为一个刚入门Silverlight的人来说,学习新知识就要做好笔记。我是刚入门。在不断在摸索。写这篇文章是让打算入门和刚入门的人有所了解Silverlight。这篇文章主要是讲的Silverlight 2种查询的方法。步入正题

第一步:引入命名空间 System.Windows.Controls.Data(后面会讲有什么用)

第二步:创建文件夹和相应的类。下面是我写的对应的文件夹和类

第三步 编写内容。

首先是 model文件夹下的类

    public class Student
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

其次是viewmodel下的类

    public class StudentViewModel:INotifyPropertyChanged
{

public StudentViewModel() {

Getstu();
}
public ObservableCollection<Student> Students { get; set; }
public ObservableCollection<Student> Getstu()
{

Students
= new ObservableCollection<Student>()
{
new Student{ Name = "张三", Age = 21 },
new Student{Name = "李四", Age = 22 },
new Student{Name = "王五", Age = 23 },
};
return Students;
}
#region INotifyPropertyChanged 成员
public event PropertyChangedEventHandler PropertyChanged;
#endregion

第四步:编写前台内容

第一种方法:

<UserControl x:Class="ceshi.MainPage"
xmlns
="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x
="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d
="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc
="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable
="d"
//第一步 引入System.Windows.Controls.Data 对应的是前面引入的命名空间
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"

第二步
//这个是绑定的viewmodel
xmlns:model="clr-namespace:ceshi.ViewModel"

d:DesignHeight
="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

<UserControl.Resources>
第三步
//使用viewmodel 设置别名 StudentViewModel就是viewmodel下的类名
<model:StudentViewModel x:Key="page" />
</UserControl.Resources>
第四步
//看到DataContext 了吗?意思是整个Grid 都用哪个viewmodel 绑定数据
<Grid x:Name="LayoutRoot" Background="White" Height="280" Width="372" DataContext="{StaticResource page}">

//ItemsSource 绑定的是viewmodel的集合
<data:DataGrid AutoGenerateColumns="False" Height="190" HorizontalAlignment="Left" Margin="36,48,0,0" Name="dataGrid1" VerticalAlignment="Top" Width="275" ItemsSource="{Binding Students}">
<data:DataGrid.Columns>

<data:DataGridTextColumn Header="姓名" Width="145" Binding="{Binding Name}" d:IsLocked="True"/>
<data:DataGridTextColumn Header="年龄" Width="130" Binding="{Binding Age}" d:IsLocked="True"/>
</data:DataGrid.Columns>
</data:DataGrid>
</Grid>
</UserControl>

第二种方法是:删除二,三,四步骤,在后台代码加入2句话。替代二三四三步

    public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
StudentViewModel model
= new StudentViewModel();
this.DataContext = model;
}
}

写先到这里,有不懂的可以交流。我也是新手,有问题多多提出来!

posted @ 2011-07-22 11:53 高导 阅读(1347) 评论(2) 编辑

  最近忙了一段时间,总算闲下来2天。看着77日发售的仙剑,我虽然如约拿到了游戏,但是真是没时间玩。最为一个仙剑迷,拿到游戏却不能玩,这是痛苦呀!前2天试玩了一下,感觉还可以。总体来说比仙四有进步。

  据说仙剑4和仙剑5的开发引擎是同一个,虽然我不懂,但是我相信技术应该也都差不多。为什么仙五比仙四好呢,只是画面做工比较上进。

如果没记错仙四是07年的产品,仙五是11年的产品,这四年间,游戏一直停留在07年的水平,有点说不过去了。这四年发展多快。为什么中国游戏总用旧的引擎呢?我认为好游戏和好电影一样,十年磨一剑。为什么暗黑这么火呢。应为这几年这个团队一直在创新。研究新引擎。没有创新就没有发展,以后就会没人买。

  最近打的火热的战地3和现在战争3 就是一个例子,现在战争3用的和使命召唤7 同一个引擎。战地3就抓住了这一个特点,进行抨击。确实在国外竞争很激烈。国内竞争不那么激烈,但是我们也要创新呀!为了游戏而去做游戏,肯定做不好。

其实我也不喜欢新技术,觉得老技术有把握。但是总停留在老技术上,就没有创新。我也在试着学习一些新的技术。虽然接触有些难度,但是我能坚持。不求多,一二样足以!

我希望国产游戏不只是模仿,突破下自己,才能赢得未来。

最后我要说一句,国产游戏我支持正版,毕竟是国人自己做的。做软件的,都不容易!

posted @ 2011-07-21 17:53 高导 阅读(133) 评论(0) 编辑

1.针对数组元素的查询和转换操作

加入有个int类型的数组,要转换成double,那该怎么做呢?

数组类型基类有一个Array的ConvertAll方法实现。

实现代码如下:

1 static Converter<int, double> intdouble = delegate(int ele) { return (double)ele; };
2 public static void Main()
3 {
4 int[] intarr = new int[] { 1, 5, 6, 7, 8, 9, 10 };
5 double[] arrdouble = Array.ConvertAll<int, double>(intarr, intdouble);
6 Array.ForEach<double>(arrdouble, ele => { Console.WriteLine("{0:N}\n", ele); });
7
8 }

不知道还有没有更好的办法?

2.针对数组的每个元素都做相同的改变,那该怎么做呢?

可以用   public static void ForEach<T>(T[] array, Action<T> action);这个方法。第二个参数是一个Action的委托。

直接贴出代码了:

1 static void Main(string[] args)
2 {
3 //源数组
4   int[] SourceArr = new int[]
5 {
6 0,1,2,3,4,5,6,7,8,9
7 };
8 //目标数组
9   int[] TargetArr = new int[SourceArr.Length];
10 int index=0;
11 //将施加于每个数组元素的“加工方法”
12 Action<int> DoubleElement = delegate(int element)
13 {
14 TargetArr[index++] = element * 2;
15 };
16 //完成源数组的“加工”
17 Array.ForEach<int>(SourceArr, DoubleElement);
18 //显示处理结果
19 Array.ForEach<int>(TargetArr, (elelm) => { Console.WriteLine(elelm); });
20
21 Console.ReadKey();
22 }

3.数组元素的排序

 排序的方法很多,我就不多说了。我问介绍的一个排序肯定是不常用的。直接上代码了:

View Code
class Program
{
static void Main(string[] args)
{
MyClass[] Objs
= new MyClass[10];

Random ran
=new Random();
for (int i = 0; i < 10; i++)
Objs[i]
= new MyClass { Value = ran.Next(1, 100) };

Comparison
<MyClass> WhoIsGreater = delegate(MyClass x, MyClass y)
{
if (x.Value > y.Value)
return 1;
else
if (x.Value == y.Value)
return 0;
else
return -1;
};

Array.Sort
<MyClass>(Objs,WhoIsGreater);

Array.ForEach
<MyClass>(Objs,(obj)=>{Console.WriteLine(obj.Value);});

Console.ReadKey();
}
}

class MyClass
{
public int Value;
}

4.在多态数组中筛选特定类型数组

如果一个数组是object,这个数组称为“多态数组”

比如我定义一个  object[] obj = new object[] { 1,"hello",100,"string"};

打算在里面查询出所有字符串数组怎么办?

.net有一个IEnumerable 类型,

定义如下:   public static IEnumerable<TResult> OfType<TResult>(this IEnumerable source);

数组基类Array实现IEnumerable<T>接口。可以使用OfType<T>方法从多态数组中选取字符串

object[] obj = new object[] { 1,"hello",100,"string"};

IEnumerable
<string> strs = obj.OfType<string>();
foreach (var item in strs)
{
Console.WriteLine(item);
}

5.检测数组中的元素是否满足某个条件

  数组基类Array提供了相应的静态方法

 public static bool TrueForAll<T>(T[] array, Predicate<T> match);

Predicate<T>是一个委托,返回bool值的方法,此方法代表数组元素必须满足的条件,其接收的参数就是数组元素自身。

例如:检测某整数是否小于100

int[] arr1 = new int[] { 1,2,3,4,8,5};
Predicate
<int> match=delegate(int value){
return value<100?true:false;
};
bool isLessthan100= Array.TrueForAll<int>(arr1, match);
Console.WriteLine(isLessthan100);

6.连动数组的排序

 Array 有一个Sort 重载: public static void Sort<TKey, TValue>(TKey[] keys, TValue[] items);

假设有2个一样长的数组,(分别叫做keys和items),这2个数组的元素是一一对应的。keys数组第一个元素对应的是items第一个数组的元素。

并且这2个数组之间对应是连动关系的。

上述sort方法对应keys数组中的元素进行排序,同事会改变items数组的元素位置。

 回家编辑...

posted @ 2011-05-18 11:43 高导 阅读(125) 评论(1) 编辑
摘要: 有这样2个数组,如何比较他们的大小呢?数组1 int[] arr1 = new int[]2 {3 1,2,3,44 };5 int[] arr2 = new int[]6 {7 1,2,3,58 }; 如果是NET4.0之前,我想好多人都会拿出数组的元素,一个个的比较。没错,我的想法也是这样的。 但是NET4.0中,数组基类Array实现了一个新增的接口IStructuralEquatable,从而是所有数据可以直接对比其所拥有的数据是否相等。 public interface IStructuralEquatable { bool Equals(object other, IEquali.阅读全文
posted @ 2011-05-17 17:08 高导 阅读(583) 评论(1) 编辑
摘要: 示例代码 1 public static void Main() 2 { 3 string strA = "abcdef"; 4 string strB = "abcdef"; 5 Console.WriteLine(ReferenceEquals(strA, strB)); 6 string strC = "abc"; 7 string strD = strC + "def"; 8 Console.WriteLine(ReferenceEquals(strA, strD)); 9 strD = String.In阅读全文
posted @ 2011-05-05 11:43 高导 阅读(56) 评论(0) 编辑
摘要: System.Object是所有类型的基类,任何类型都直接或间接继承自System.Object类。没有指定基类的类型都默认继承于System.Object,从而具有Object的基本特性,这些特性主要包括: 通过GetType方法,获取对象类型信息。 通过Equals、ReferenceEquals和==,实现对象判等。 通过ToString方法,获取对象字符串信息 ,默认返回对象类型全名。 通过MemberwiseClone方法,实现对象实例的浅拷贝。 通过GetHashCode方法,获取对象的值的散列码。 通过Finalize方法,在垃圾回收时进行资源清理。1.ToString解析 T.阅读全文
posted @ 2011-05-05 11:09 高导 阅读(104) 评论(0) 编辑
摘要: 1.Flags 以Flags特性来将枚举数值看作位标记,而非单独的数值如果没有DllImport程序会报错。示例代码 1 [Flags] 2 enum Animal 3 { 4 Dog = 1, 5 Cat = 2, 6 Duck = 4, 7 Chicken = 8 8 } 9 10 public class Test11 {12 public static void Main()13 {14 Animal ans = Animal.Cat | Animal.Dog;15 Console.WriteLine(ans.ToString());16 }17 }如果没有Flags特性,这里的结果将阅读全文
posted @ 2011-04-27 17:30 高导 阅读(121) 评论(0) 编辑
摘要: z1.在适当的情况下对对象实现弱引用。 为对象实现弱引用,是有效提高性能的手段之一。弱引用是对象引用的一种“中间态”,实现了对象既可以通过GC回收其内存,又可被应用程序访问的机制。这种看似矛盾的解释,的确对胖对象的内存性能带来提升,因为胖对象需要大量的内存来创建,弱引用机制保证了胖对象在内存不足时GC可以回收,而不影响内存使用,在没有被GC回收前又可以再次引用该对象,从而达到空间与时间的双重节约。 在.NET中,WeakReference类用于表示弱引用,通过其Target属性来表示要追踪的对象,通过其值赋给变量来创建目标对象的强引用实例代码 1 namespace Project3 2 { 阅读全文
posted @ 2011-04-25 17:00 高导 阅读(285) 评论(1) 编辑