小编ptu*_*utt的帖子

派生类的通用约束

我有A班:

public class ClassA<T>
Run Code Online (Sandbox Code Playgroud)

B类来自A:

public class ClassB : ClassA<ClassB>
Run Code Online (Sandbox Code Playgroud)

C类来自B类:

public class ClassC : ClassB
Run Code Online (Sandbox Code Playgroud)

现在我有一个带约束的泛型方法

public static T Method<T>() where T : ClassA<T>
Run Code Online (Sandbox Code Playgroud)

好的,现在我想打电话:

ClassC c = Method<ClassC>();
Run Code Online (Sandbox Code Playgroud)

但我得到编译错误说: Type argument 'ClassC' does not inherit from or implement the constraint type 'ClassA<ClassC>.

然而,编译器将允许:

ClassB b = Method<ClassB>();
Run Code Online (Sandbox Code Playgroud)

我的理解是,这失败了,因为ClassC继承ClassA<ClassB>而不是ClassA<ClassC>

我真正的问题是,是否有可能创建一个派生类ClassB,可以通过某种方式使用泛型方法?

这可能看起来仿制药过度使用,我同意.我正在尝试创建从单独项目中的亚音速数据对象派生的业务层对象.

注意:我已经为<T>添加了额外的空格,否则它们会从问题中删除.

c# generics subsonic constraints

8
推荐指数
1
解决办法
8330
查看次数

您对Microsoft应用程序块的体验如何?

与编写自己的解决方案相比,您对Microsoft应用程序块和其他Microsoft解决方案的实际体验是什么?

我开始了一个新项目并决定给他们一个机会.我使用了异常处理和日志记录块.异常处理块适用于我需要的东西.记录块占我所需要的95%,其余需要定制.花了一段时间研究如何自定义它,然后有一些版本参考问题.无论是写入文件还是数据库(在这个项目中),日志记录都是一项非常简单的任务.事后来看,编写自己的内容会更快.

该项目还需要与PDA同步数据.通过一些研究,微软指出的方向似乎很明显是同步服务.在花了大约3天试图获得不同软件的所有正确版本之后,我无法获得运行Windows Mobile Synchronization Error的示例.我选择使用简单的OpenNETCF桌面通信将文件复制到pda或从pda复制文件,使用二进制对象序列化,并编写我自己的基本同步代码,这花费的时间更少,并且按照我想要的方式完成所有操作(并且不感觉好:)))

一些积极因素:

  • 不必重新发明轮子
  • 受益于更新
  • 受益于其他旨在与之合作的工具
  • 庞大的用户群增加了反馈,测试和稳健性
  • 你的简历很好
  • 添加到团队中的新开发人员可能熟悉它们
  • 提供许多可自定义的功能

底片:

  • 过度设计,尝试成为瑞士军刀,提供比创建复杂性的一个解决方案所需的更多功能.
  • 即便如此,它们似乎永远不会满足项目的所有要求,尾巴最终会摇摆不定.我想这取决于你对应用程序的工作方式有多大影响.
  • 需要学习如何正确实现应用程序块(好的,所以这只需要在第一次使用它们时完成,所以它没什么大不了的)
  • 增加了对不同dll版本的依赖性,其中一点也是如此
  • 大而笨重(这些天不是真正的问题)
  • 由于其复杂性而难以定制

这是我的学习经历,将使我能够更好地决定是否使用Microsoft解决方案(或其他第三方解决方案)而不是编写自己的解决方案.

你的经历怎么样?

.net frameworks

7
推荐指数
1
解决办法
510
查看次数

在DataSource上找不到DataMember属性[ObjectName]

我有一个业务对象,它是子对象的组合。
我在Visual Studio 2008中使用数据绑定来绑定到Windows窗体上的控件。

但是我在窗体的InitializeComponent方法中收到上述错误。

可以说我有一个名为ParentObject的对象,其中包含一个通用列表ChildListObject。ParentObject还具有Child对象,该对象本身具有Child对象。(即ParentObject.ChildObject.ChildObject)

我设置了主要的绑定源:

BindingSource.Datasource = ParentObject
Run Code Online (Sandbox Code Playgroud)

我添加一个网格并设置它的绑定源:

GridBindingSource.Datasource = ParentObject
Run Code Online (Sandbox Code Playgroud)

并将DataMember设置为:

BindingSourceB.DataMember = "ChildListObject"
Run Code Online (Sandbox Code Playgroud)

现在,将网格的数据源设置为GridBindingSource:

Me.MyDataGridView.DataSource = Me.GridBindingSource
Run Code Online (Sandbox Code Playgroud)

还有其他绑定到ParentObject和ParentObject.ChildObject属性的控件。

我已经在一个隔离的项目中对此进行了测试,并且效果很好,所以我很难找出真正的错误是什么?曾经起作用的代码会突然停止工作。

我得到的错误是(如果我在上面的示例中使用对象的名称):

“在数据源上找不到DataMember属性ChildObject”

它在以下方面失败:

Me.MyDataGridView.DataSource = Me.GridBindingSource
Run Code Online (Sandbox Code Playgroud)

奇怪的是,如果我删除<System.Diagnostics.DebuggerStepThrough()>,然后当它失败时继续,就可以了???但是它在运行时仍然失败。

有没有人有任何想法可以指出我正确的方向?我通过谷歌搜索发现的最接近的信息可能与生成的设计器代码混乱的顺序有关。一直在工作的代码将突然停止工作。


这个问题似乎来了又去。如果在出现错误后我仍然继续,则程序会愉快地继续运行而不会出现问题。可能是VS中的错误。但是在运行时错误仍然存​​在。

是什么导致此问题?如何阻止它发生?

data-binding business-objects visual-studio-2008

5
推荐指数
1
解决办法
1万
查看次数

Windows Mobile同步错误

我是Windows Mobile开发的新手,并且一直在研究在运行WM6和SQL Server 2005数据库之间同步数据的方法.经过一番研究后,我决定选择Windows同步服务.

我从查看示例开始:SyncServicesForDevicesSample

我下载并安装了自述文件中列出的所有必备软件,包括:

  • Visual Studio 2008 Professional SP1
  • SQL Server Compact 3.5 Service Pack 1(SP1)
  • ADO.NET 1.0的同步服务(设备)

当我加载示例时,我注意到"GBADeviceClient"项目中的System.Data.SqlServerCe.dll引用丢失,因此我将其链接到C:\ Program Files\Microsoft SQL Server Compact Edition\v3.5中的版本设备为3.5.5386.0.

当我运行该项目时,我收到以下错误消息:

找不到文件或程序集名称'System.Data.SqlServerCe,Version = 3.5.1.0,Culture = neutral,PublicKeyToken = 3BE235DF1C8D2AD3'或其中一个依赖项.

当我查看模拟器(删除程序)时,我安装了以下软件:

  • 同步服务ADO.NET 1.0
  • Microsoft .Net CF 3.5 EN-String R ...
  • SQLServerCompact 3.5 Toos EN
  • SQLServerCompact 3.5 Repl
  • SQLServerCompact 3.5核心Microsoft
  • .NET CF 3.5

因此,在PDA上调用错误的文件版本...如何引用"正确"版本?

或者,是否有更简单的方法来同步SQL Server 2005数据库中的数据子集(大约10个表,其中大多数只是查找列表)?

提前致谢.

synchronization windows-mobile sql-server-ce

5
推荐指数
1
解决办法
3541
查看次数

如何在CKEditor中将p元素默认为"Normal"样式

如果我将一个段落样式添加到CKEdtior,例如:

format_p:{element:'p',attributes:{'style':'FONT-SIZE:16px; color:#000000; FONT-STYLE:normal; FONT-FAMILY:Arial,Helvetica,sans-serif; font-weight:正常;' }}

按Enter键时的默认样式为空白.但是,如果我将样式设置为"Normal",则应用样式,然后通过单击enter键创建后续p包括上面的样式.

我想要的是所有段落(标签'p')默认使用"普通"样式.有没有办法实现这个目标?

ckeditor

5
推荐指数
1
解决办法
1517
查看次数