小编Bil*_*lla的帖子

理解封装和抽象的简单方法

学习OOP概念特别有兴趣深入了解抽象和封装.

已经查看了下面的内容

抽象VS信息隐藏VS封装

抽象和封装之间的区别?

我发现用一个真实而简单的示例类/代码片段很难理解这些概念.

我的一位同事说抽象只不过是创建抽象类和普通类来保护其成员变量的范围称为封装.

是否有一种简单的方法可以理解并帮助其他人了解它们究竟是什么,而不是重复下面的内容?

抽象和封装是互补的概念:抽象侧重于对象的可观察行为......封装侧重于产生这种行为的实现......封装通常是通过信息隐藏来实现的,这是隐藏所有内容的过程.对象的秘密不会对其基本特征产生影响.

language-agnostic oop encapsulation abstraction

67
推荐指数
7
解决办法
19万
查看次数

将空的js数组传递给控制器​​会给出null

这是我的模型,它是一个WCF代理类

public class MyModel
{
    public Employees[] MyEmpls{get;set;}
    public int Id{get;set;}
    public OrgName{get;set;}
}
Run Code Online (Sandbox Code Playgroud)

将下面的json结构对象传递MyEmpls as empty array给MVC控制器.

["Id":12, "MyEmpls":[], "OrgName":"Kekran Mcran"]
Run Code Online (Sandbox Code Playgroud)

调节器

[HttpPost]
public ActionResult SaveOrg(MyModel model)
{
  //model.MyEmpls is null here
}
Run Code Online (Sandbox Code Playgroud)

我期待mode.MyEmpls作为空c#数组而不是null.有人可以帮我吗?我们需要为此编写自定义模型绑定器吗?

c# asp.net-mvc wcf json model-binding

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

简单的依赖性解析器

如何创建简单的依赖关系解析器,不使用任何内置或库,如Autofac,Ninject等.

这是我的面试问题.

我写了这个简单的代码,他们说它看起来不太好.它就像非常难以编码的想法.

public interface IRepository { }
interface IDataProvider
{
    List<string> GetData();
}
public class SQLDataProvider : IDataProvider
{
    private readonly IRepository _repository { get; set; }
    public SQLDataProvider(IRepository repository)
    {
        _repository = repository;
    }
    public List<string> GetData()
    {
        return new List<string> { "" };
    }
}
public class MockDataProvider : IDataProvider
{
    public List<string> GetData()
    {
        return new List<string> { "" };
    }
}
class Program
{
 static void Main(string[] args)
 {
    string targetClass = "SQLDataProvider";
    //Here i …
Run Code Online (Sandbox Code Playgroud)

c# design-patterns dependency-injection

27
推荐指数
2
解决办法
2万
查看次数

DateTime.Now和Culture/Timezone特定

我们的应用程序旨在处理来自不同地理位置的用户.

我们无法检测当前最终用户当地时间和时区对其进行操作的情况.他们选择不同的文化,如sv-se,en-us,ta-In甚至他们从欧洲/伦敦时区访问..

我们在美国托管服务器托管它,应用程序用户来自 Norway/Denmark/Sweden/UK/USA/India

问题是我们用来DateTime.Now存储记录创建/更新日期等.

由于服务器在美国运行,所有用户数据都保存为美国时间:(

在SO中进行研究后,我们决定将所有历史日期存储在DB中 DateTime.UtcNow

问题:

在此输入图像描述

创建了一条记录29 Dec 2013, 3:15 P.M Swedish time.

 public ActionResult Save(BookingViewModel model)
    {
        Booking booking = new Booking();
        booking.BookingDateTime = model.BookingDateTime; //10 Jan 2014 2:00 P.M
        booking.Name = model.Name;
        booking.CurrentUserId = (User)Session["currentUser"].UserId;
        //USA Server runs in Pacific Time Zone, UTC-08:00
        booking.CreatedDateTime = DateTime.UtcNow; //29 Dec 2013, 6:15 A.M
        BookingRepository.Save(booking);
        return View("Index");
    }
Run Code Online (Sandbox Code Playgroud)

我们希望向在India/Sweden/USA登录的用户显示相同的历史记录时间.

截至目前,我们正在使用当前文化用户登录并从配置文件中选择时区并使用TimeZoneInfo类进行转换

<appSettings>
    <add key="sv-se" value="W. Europe Standard Time" />
    <add key="ta-IN" value="India Standard …
Run Code Online (Sandbox Code Playgroud)

c# asp.net timezone datetime nodatime

27
推荐指数
3
解决办法
4万
查看次数

显示1,2,3,4,5,6,8,10,11为1-6,8,10-11

我有这个序列1,2,3,4,5,6,8,10,11

预期产量为1-6,8,10-11

这个问题是关于以易读的形式格式化序列

我尝试使用c#并使用了许多if&else.

采访者说,有一些简单的算法可以做到这一点.

我不知道如何实现这一点非常简单.

同样对于1,2,3我显示1-3.他们说错了!

这个逻辑中是否涉及任何设计模式(解释器)?

c# java algorithm logic

16
推荐指数
2
解决办法
8739
查看次数

使用单引号传递参数

如何将参数传递给'包含的javascript函数

var name ="Lauren O'Donald";

var htmlAnch='<a onclick="javascript:selectEmployee(1100,"'+name+'");return false;" 
                 href="javascript:void(0);">O'Donald, Lauren</a>';

 $(document).append($(htmlAnch));
Run Code Online (Sandbox Code Playgroud)

由于名称'Lauren O'Donald'包含单引号,因此javascript函数未执行.

如何添加参数'并准备动态html以使其工作?

这是要生成的动态代码

 var rows = new StringBuffer();

 $(data).each(function(index) {
      rows.append(String.format('<tr><td><a href="No.aspx" 
                onclick="javascript:selectEmployee({3},\"{1} {2}\");return 
               false;">{0}</a></td></tr>',
                String.format("{0}, {1}", this.Surname, this.FirstName),
                this.Surname,
                this.FirstName,
                this.Id
            ));
   });
Run Code Online (Sandbox Code Playgroud)

javascript jquery

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

MemoryStream.CopyTo不工作

TiffBitmapDecoder decoder = new TiffBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);

using (MemoryStream allFrameStream = new MemoryStream())
{
    foreach (BitmapFrame frame in decoder.Frames)
    {
        using (MemoryStream ms= new MemoryStream())
        {
            JpegBitmapEncoder enc = new JpegBitmapEncoder();
            enc.Frames.Add(BitmapFrame.Create(frame));
            enc.Save(ms);
            ms.CopyTo(allFrameStream);
        }
    }

    Document documentPDF = new Document();
    PdfWriter writer = PdfWriter.GetInstance(documentPDF, allFrameStream);
}
Run Code Online (Sandbox Code Playgroud)

总是allFrameStream的Length=0.但我可以看到每次迭代ms.Length=989548.我的代码中的错误是什么.为什么ms.CopyTo(allFrameStream)不工作?

.net c# io c#-4.0

14
推荐指数
3
解决办法
8623
查看次数

WebHttpBinding与Http和Https

我正在尝试使用https和http作为网站.该网站有.svc文件,它们充当REST服务并从JavaScript调用.

我的配置:

<system.serviceModel>
    <behaviors>
      <endpointBehaviors>
        <behavior name="AjaxBehavior">
          <webHttp />
        </behavior>
      </endpointBehaviors>
      <serviceBehaviors>
        <behavior name="MyServiceBehaviour">
          <serviceDebug includeExceptionDetailInFaults="true" />
          <serviceMetadata httpGetEnabled="True" httpsGetEnabled="true"/>         
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <services>
      <service behaviorConfiguration="MyServiceBehaviour" name="MyService.Lookups">
        <endpoint address="" behaviorConfiguration="AjaxBehavior"
          binding="webHttpBinding" bindingConfiguration="httpWebBinding" contract="MyService.Lookups" >         
        </endpoint>
        <endpoint address="" behaviorConfiguration="AjaxBehavior"
          binding="webHttpBinding" bindingConfiguration="httpsWebBinding" contract="MyService.Lookups" >          
        </endpoint>
        <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
      </service>
    </services>
    <bindings>      
      <webHttpBinding>
        <binding name="httpsWebBinding">
          <security mode="Transport">
            <transport clientCredentialType="None" proxyCredentialType="None" />
          </security>
        </binding>
        <binding name="httpWebBinding">
          <security mode="None">
            <transport clientCredentialType="None" proxyCredentialType="None" />
          </security>
        </binding>
      </webHttpBinding>
    </bindings>   
  </system.serviceModel>
Run Code Online (Sandbox Code Playgroud)

浏览https://myserver/services/Lookups.svc/Hello …

c# asp.net wcf web-services webhttpbinding

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

添加更多行为而不创建新类

这是接受采访时提出的问题.

Label一个属性Text
在一个页面中标签很简单Label,在其他页面中它可以处理任何一个或以下动作的组合
Clickable
Resizable
Draggable

如何设计应用OOP设计原理和设计模式的标签组件?

我说我会创建以下内容:

public class Label
{
  public string Text{get;set;}
}
public interface IClickable
{
 void Click();
}

public interface IDraggable
{
 void Drag();
}
public interface IResizable
{
 void Resize();
}
Run Code Online (Sandbox Code Playgroud)

因此,如果客户想要Resizable Label

public class ResizableLabel:Label,IResizable
{
  ....
}
Run Code Online (Sandbox Code Playgroud)

同样的道理ClickableLable,DraggableLabel

但是,我觉得这是不正确的方法,因为我不想添加那些具体的类.我想避免ClickableAndDraggableLabelClickableDraggableResizableLabel.

是否有任何设计模式可以在不添加这些具体类的情况下解决此问题?

c# oop design-patterns design-principles

11
推荐指数
2
解决办法
1165
查看次数

显示下一个活动日期

用于存储事件和事件元数据的UI设计

在此输入图像描述

SQL TABLE DESIGN

CREATE TABLE [dbo].[EVENTS]
([ID] [int] IDENTITY(1,1) NOT NULL,
 [Name] [nvarchar](255) NOT NULL)
Run Code Online (Sandbox Code Playgroud)

CREATE TABLE [dbo].[EVENTS_META](
[ID] [int] IDENTITY(1,1) NOT NULL,
[event_id] [int] NOT NULL,
[meta_key] [varchar](255) NOT NULL,
[meta_value] [bigint] NOT NULL)
Run Code Online (Sandbox Code Playgroud)

事件数据是 事件

事件元数据是 Events_Meta表

我跟着重复日历事件和一些最终的数学,我写了下面的查询

列出所有在结束日期之前的事件日期

SELECT EV.*
FROM events AS EV
RIGHT JOIN events_meta AS EM1 ON EM1.event_id = EV.id
RIGHT JOIN events_meta AS EM2 ON EM2.meta_key = 'repeat_interval_'+ CAST(EM1.id as Varchar(100))
WHERE EM1.meta_key = 'repeat_start'
AND ((1391040000 - …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2008

11
推荐指数
1
解决办法
4193
查看次数