由于多重继承是不好的(它使源更复杂),C#不直接提供这样的模式.但有时候拥有这种能力会有所帮助.
例如,我能够使用接口和三个类来实现缺少的多继承模式:
public interface IFirst { void FirstMethod(); }
public interface ISecond { void SecondMethod(); }
public class First:IFirst
{
public void FirstMethod() { Console.WriteLine("First"); }
}
public class Second:ISecond
{
public void SecondMethod() { Console.WriteLine("Second"); }
}
public class FirstAndSecond: IFirst, ISecond
{
First first = new First();
Second second = new Second();
public void FirstMethod() { first.FirstMethod(); }
public void SecondMethod() { second.SecondMethod(); }
}
Run Code Online (Sandbox Code Playgroud)
每次我向其中一个接口添加方法时,我都需要更改类FirstAndSecond.
有没有办法将多个现有类注入一个新类,就像在C++中一样?
也许有一种使用某种代码生成的解决方案?
或者它可能看起来像这样(假想的c#语法):
public class FirstAndSecond: IFirst from First, ISecond …Run Code Online (Sandbox Code Playgroud) 人们向新手推荐SVN来源控制似乎相当普遍(至少在这里),因为它比其中一个分布式选项"更容易".作为SVN的一个非常随意的用户,在为我的许多项目切换到Git之前,我发现根本不是这种情况.
概念上更容易设置DCVS存储库git init(或其中任何一个),而不必在SVN的情况下设置外部存储库.
SVN,Git,Mercurial,Bazaar之间的基本功能都使用基本相同的命令来提交,查看差异等.这真是一个新人真正要做的事情.
与SVN的"提交一切"政策相比,Git要求更改的方式在提交之前显式添加的微小差异在概念上很简单,除非我错了,否则在使用Mercurial或Bazaar时甚至都不是问题.
那么为什么SVN更容易被认为呢?我认为这根本不是真的.
我需要在实时Sharepoint环境中编辑web.config文件,但我不确定如果我这样做会发生什么(我想输出自定义错误).
这会导致IIS6工作进程回收吗?
活跃用户会因此失去会话状态吗?
或者我可以安全地编辑文件吗?
可能重复:
有没有人有任何CSLA的实际经验?
你曾经使用过CSLA,如果有的话,你有什么想法?我正在为一家使用CSLA和NHibernate的公司开始一份新合同,并希望对该框架有一些看法或见解.
我的"开始调试"按钮和元素菜单显示为灰色......但仅限于我的一个项目(ASP.NET网站).我不知道我做了什么来禁用它.
我已经检查了解决方案和项目的属性页面中的所有内容.我甚至将它与另一个项目进行了比较,但似乎没有什么可以做到的......也许我错过了一个选项?
好的,我当前项目中的另一个路障.
我的主页和内容页面中都没有表单元素,我倾向于在相关的内容中包含所有表单.
然而,在当前的项目中,我们有一个他们想要的页面.右上角的登录表单,以及内容中的问题表单.
试图搞定这个,我已经遇到了ASP.NET抱怨在母版页中需要单个表单元素的问题.TBH,我真的不明白为什么这是ASP.NET的要求,但是嘿嘿.
有谁知道我是否/如何让主页和内容页面包含独立工作的表单元素?
如果没有,您能提供有关如何获得所需外观/功能的建议吗?
通常,MVC frameeworks的结构类似于:
/models
/views
/controllers
/utils
Run Code Online (Sandbox Code Playgroud)
但是,在Web应用程序套件中,我决定将所有模型,视图和控制器聚集在一起可能不是最好的清晰度,除非我将系统视为一个应用程序而不是应用程序套件.但是,有些东西将每个"应用程序"联系在一起,比如用户和用户角色的概念.
所以我有三种可能的解决方案:
(1)执行我不想做的事情,并将每个模型,视图和控制器放在一起,无论它属于哪个应用程序.这将套件视为单个应用程序,因为它们由几个常见线程(包括用户)捆绑在一起.
(2)按申请分组代码.
/app1
/models
/views
/controllers
/utils
/app2
/models
/views
/controllers
/utils
Run Code Online (Sandbox Code Playgroud)
(3)按类型对代码进行分组,让实用程序代码在所有应用程序之间共享.
/models
/app1
/app2
/views
/app1
/app2
/controllers
/app1
/app2
/utils
Run Code Online (Sandbox Code Playgroud)
我错过了一个选项吗?未来开发人员最合乎逻辑的方案是什么?我个人更喜欢2和3,但也许大多数人会期望1.
说我有以下内容:
<ul>
<li>First item</li>
<li>Second item</li>
<li>Third item</li>
</ul>
Run Code Online (Sandbox Code Playgroud)
如何使用jQuery在第一个之后选择所有子元素?所以我可以实现以下目标:
<ul>
<li>First item</li>
<li class="something">Second item</li>
<li class="something">Third item</li>
</ul>
Run Code Online (Sandbox Code Playgroud) Objective-C没有名称空间; 它很像C,一切都在一个全局命名空间内.通常的做法是使用首字母为类添加前缀,例如,如果您在IBM工作,则可以在前面加上"IBM"; 如果你在微软工作,你可以使用"MS"; 等等.有时首字母引用项目,例如Adium前缀带有"AI"的类(因为没有公司可以使用缩写).Apple使用NS作为前缀类,并说这个前缀仅供Apple使用.
到目前为止一切顺利.但是在前面添加2到4个字母到一个类名是一个非常非常有限的命名空间.例如,MS或AI可能具有完全不同的含义(例如,AI可能是人工智能),而其他一些开发人员可能决定使用它们并创建一个同名的类.Bang,命名空间冲突.
好吧,如果这是你自己的一个类和你正在使用的外部框架之间的冲突,你可以轻松地改变你的类的命名,没什么大不了的.但是如果你使用两个外部框架,那么你没有源代码的框架和你无法改变的框架呢?您的应用程序与它们都链接,并且您会收到名称冲突.你会如何解决这些问题?以这样的方式解决它们的最佳方法是什么,你仍然可以使用这两个类?
在C中,您可以通过不直接链接到库来解决这些问题,而是使用dlopen()在运行时加载库,然后使用dlsym()找到您要查找的符号并将其分配给全局符号(即可以任何你喜欢的方式命名)然后通过这个全局符号访问它.例如,如果您遇到冲突,因为某个C库有一个名为open()的函数,您可以定义一个名为myOpen的变量并让它指向库的open()函数,因此当您想要使用系统open()时,你只需使用open(),当你想使用另一个时,你可以通过myOpen标识符访问它.
在Objective-C中是否有类似的可能性,如果没有,是否还有其他聪明,棘手的解决方案可以使用解析命名空间冲突?有任何想法吗?
只是为了澄清这一点:建议如何提前避免命名空间冲突或如何创建更好的命名空间的答案当然是受欢迎的; 但是,我不会接受它们作为答案,因为它们不能解决我的问题.我有两个库和它们的类名冲突.我无法改变它们; 我没有任何一个的来源.碰撞已经存在,如何提前避免它的提示将不再有用.我可以将它们转发给这些框架的开发人员,并希望他们在未来选择更好的命名空间,但目前我正在寻找一个解决方案,以便在单个应用程序中使用框架.任何可能的解决方案?
asp.net ×2
c# ×1
cocoa ×1
csla ×1
forms ×1
frameworks ×1
iis-6 ×1
interface ×1
javascript ×1
jquery ×1
macos ×1
master-pages ×1
mysql ×1
namespaces ×1
nhibernate ×1
objective-c ×1
orm ×1
sharepoint ×1
views ×1
webforms ×1