我最近一直在考虑使用扩展方法在我控制的类上实现辅助工具(即,在同一个程序中,我可以修改).它背后的基本原理是,很多时候,这些辅助工具在非常特定的场景中使用,并且不需要访问类的内部值.
例如,假设我有一个StackExchange类.它有像PostQuestion和Search和的方法AnswerQuestion.
现在,如果我想手动计算我的声誉以确保StackOverflow不会欺骗我,该怎么办?我会实现以下方面的内容:
int rep=0;
foreach(var post in StackExchangeInstance.MyPosts)
{
rep+=post.RepEarned;
}
Run Code Online (Sandbox Code Playgroud)
我可以向StackExchange类添加一个方法,但它不需要任何内部,并且它仅用于程序的一个或两个其他部分.
现在想象一下,如果你有10或20个这些特定的辅助方法.在某种情况下肯定有用,但绝对不适用于一般情况.我的想法是改变像
public static RepCalcHelpers
{
public static int CalcRep(StackExchange inst){ ... }
}
Run Code Online (Sandbox Code Playgroud)
喜欢的东西
namespace Mynamespace.Extensions.RepCalculations
{
public static RepCalcExtensions
{
public static int CalcRep(this Stackexchange inst){...}
}
}
Run Code Online (Sandbox Code Playgroud)
注意命名空间.理想情况下,我会使用它来在特定场景中对扩展方法进行分组.例如,"RepCalculations","Statistics"等.
我已经尝试过搜索是否听说过这种类型的模式,并且没有找到任何证据表明扩展方法被用于除了你无法修改的类之外的任何东西.
这种"模式"有哪些缺点?我应该坚持继承或组合,还是只是一个好的'静态助手类?
我需要将大量SQL查询转换为存储过程.我有一些代码在一个Delphi过程中一次更新大约20或30个值.我可以处理创建存储过程来做这样的事情.问题是我将参数传递给存储过程的方式非常笨重,如下所示:
with stored_procedure do......
Param := Parameters.AddParameter;
Param.Name := '@SSN';
Param.Value := edtSSN.text;
Param := Parameters.AddParameter;
Param.Name := '@FirstName';
Param.Value := edtFirstName.Text;
Param := Parameters.AddParameter;
Param.Name := '@LastName';
Param.Value := edtLastName.Text;
Param := Parameters.AddParameter;
Param.Name := '@UserRID';
Param.Value:= GetRIDFromCombo(cbUser);
Run Code Online (Sandbox Code Playgroud)
我也不确定是否会导致内存泄漏(是否需要释放此类TParameter对象?)
任何人都有更好的方法来处理大量的参数?(我不能使用新的库.我必须使用ADO,我使用的SQL是MSSQL)(另外,我不使用ADO.net)
我有类结构
abstract class Animal {
public Animal(){
//init stuff..
}
}
class Cat : Animal {
public Cat(bool is_keyboard) : base() //NOTE here
{
//other init stuff
}
}
Run Code Online (Sandbox Code Playgroud)
现在,看看注意到的那一行.如果你删除: base()然后它将编译没有错误.
为什么是这样?有没有办法禁用这种行为?
你好,我最近有点好奇,想做一个浏览器.我想使用现有的引擎,例如Gecko或Webkit.网络上是否有任何资源可用于如何入门和任何示例?语言选择并不重要(但请不要VB.这是我找到的唯一示例代码)
在我的ASP.Net页面中
<form id="MasterPageForm" runat="server">
Run Code Online (Sandbox Code Playgroud)
但是,无论何时生成标记,它都会变成
<form name="aspnetForm" method="post" action="SomePage.aspx..." id="aspnetForm">
Run Code Online (Sandbox Code Playgroud)
是否可以设置生成的表单HTML ID?
出于这样或那样的原因,我只是为了好玩而乱搞"简约"的ASP.Net.我已经禁用了很多东西,并试图重新实现.我无法弄清楚的一件事是如何呈现ASP.Net页面(aspx).
这是我目前的进展:
//global.asax
protected virtual void Application_BeginRequest (Object sender, EventArgs e)
{
HtmlTextWriter writer=new HtmlTextWriter(Response.Output);
if(Request.Url.AbsolutePath.Substring(0,Math.Min(Request.Url.AbsolutePath.Length,8))=="/static/"){
return; //let it just serve the static files
}else if(Request.Url.AbsolutePath=="/test1"){
test1 o=new test1();
o.ProcessRequest(Context);
o.RenderControl(writer);
writer.Flush();
writer.Close();
Response.Flush();
// Response.Write(writer.ToString());
}else{
Response.ContentType="text/plain";
Response.Write("Hi world!");
}
CompleteRequest();
}
Run Code Online (Sandbox Code Playgroud)
/ static/bit和"hi world"一样工作.我不能让/test1路线上班.它达到了这一点,但所有显示的都是黑页.
我有一个带有此设计器内容的test1.aspx页面:
<%@ Page Language="C#" Inherits="namespace.test1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>test1</title>
</head>
<body>
<form id="form1"> <!--just testing if two forms works and such-->
</form>
<form id="form2"> …Run Code Online (Sandbox Code Playgroud) 我有一个相当复杂的东西塞进T4模板.基本上我采取类似的东西
{= foo =}更多文字...
并将其转换为类(视图),如下所示:
public class MyView
{
public string foo{get;set;}
public string Write()
{
return foo+@" more text...";
}
}
Run Code Online (Sandbox Code Playgroud)
生成的代码当然要复杂得多.无论如何,T4模板现在超过600行代码,并且真正变得难以管理.我认为主要问题是混合代码和"内容"(即静态代码).我不确定如何干净地解决这个问题(当然不会影响生成的代码).我也没有看到任何可行的单元测试我的T4代码的方法,除了简单地测试它的T4执行错误.当然,似乎几乎不可能测试它生成的代码.
我可以使用任何"模型 - 视图"类型的框架或技术来使我的T4模板代码更干净吗?
我需要获得一些关于调用我的组件的程序集的元数据.因此,使用Assembly.GetCallingAssembly()似乎是一种自然的契合.但是,我发现除了Windows应用商店外,它可以在任何地方使用.它支持的地方:
但是,不支持的位置直接位于Windows应用商店应用程序中.我可以创建一个可移植的类库,然后从Windows应用程序内部调用它,但我不能直接将它放在Windows应用商店应用程序/类库中.
是否有针对此提供的解决方法或其他方式来获取由此提供的元数据类型Assembly?
.net reflection portable-class-library windows-runtime windows-store-apps
我需要从C++应用程序中获取堆栈跟踪,并将其序列化为字符串,以便稍后进行解析.我在Windows上听到的唯一一个API是StackWalk64,它似乎不受支持.
如何在Windows应用商店应用中从C++获取堆栈跟踪?
c++ exception stack-trace windows-runtime windows-store-apps
c# ×4
.net ×2
asp.net ×2
ado ×1
browser ×1
c ×1
c++ ×1
constructor ×1
delphi ×1
exception ×1
forms ×1
gecko ×1
global-asax ×1
html ×1
inheritance ×1
master-pages ×1
realloc ×1
refactoring ×1
reflection ×1
sql-server ×1
stack-trace ×1
t4 ×1
unit-testing ×1
webforms ×1
webkit ×1