这个缩写词中第一个字母的设计模式是单一责任原则.这是一个引用:
单一责任原则规定每个对象应该承担单一责任,并且该责任应该由班级完全封装.
在我们开始编码之前,这很简单明了.假设我们有一个具有明确定义的单一责任的类.要序列化类实例,我们需要为该类添加特殊的属性.所以现在班上有另一个责任.这不违反SRP吗?
让我们看另一个例子 - 接口实现.当我们实现接口时,我们只需添加其他职责,比如处理其资源或比较其实例或其他任何内容.
所以我的问题.是否有可能严格遵守SRP?怎么做到呢?
有2个代码示例:#1
string str1 = "hello";
string str2 = str1; //reference to the same string
str1 = "bye"; //new string created
Run Code Online (Sandbox Code Playgroud)
和#2
string str3 = "hello";
string str4 = (string)str3.Clone();//reference to the same string
str3 = "bye";//new string created
Run Code Online (Sandbox Code Playgroud)
看起来他们是相同的不是吗?那么使用Clone()有什么好处?当我不能使用代码#1但代码#2时,你能给我一个例子吗?
我在Google上搜索了这个,但我想出的唯一的东西已经过时而且没有用.
有没有人有关于如何使用C#.NET获取操纵杆数据的任何信息?
从MSDN获取的代码示例
public class Test {
public static void Main() {
MyBaseClass myBase = new MyBaseClass();
MyDerivedClass myDerived = new MyDerivedClass();
object o = myDerived;
MyBaseClass b = myDerived;
Console.WriteLine("mybase: Type is {0}", myBase.GetType());
Console.WriteLine("myDerived: Type is {0}", myDerived.GetType());
Console.WriteLine("object o = myDerived: Type is {0}", o.GetType());
Console.WriteLine("MyBaseClass b = myDerived: Type is {0}", b.GetType()); }}
/*
This code produces the following output.
mybase: Type is MyBaseClass
myDerived: Type is MyDerivedClass
object o = myDerived: Type is MyDerivedClass
MyBaseClass b = …Run Code Online (Sandbox Code Playgroud) 这就是我现在所拥有的
Container.RegisterType<IUserManager, UserManagerMock>();
Container.RegisterType<IUser, UserMock>(
new InjectionFactory(
(c) => c.Resolve<IUserManager>().GetUser("John")));
Run Code Online (Sandbox Code Playgroud)
得到它
Container.Resolve<IProfile>();
Run Code Online (Sandbox Code Playgroud)
我想将一个名称作为参数传递给Factory,以便我能够用名称解析用户对象; 像这样的东西:
Container.Resolve<IProfile>("Jonh");
Run Code Online (Sandbox Code Playgroud)
如何更改此案例的类型注册?
我正在编写一个C#类库组件,它将充当TCP服务器.它将通过特定端口侦听和接收XML,对其进行反序列化,然后将包含结果对象的事件作为事件参数引发.
类库本身将由VB6应用程序使用,该应用程序将接收和处理事件以及相关的COM可见类对象.
TcpServer类包装了TcpListener功能,并且不是COM可见.它处理连接并引发处理连接,断开连接和接收数据的事件.
sealed class TcpServer : IDisposable
{
private readonly TcpListener tcpListener;
private bool disposed = false;
public TcpServer(int port)
{
tcpListener = new TcpListener(IPAddress.Any, port);
tcpListener.Start();
tcpListener.BeginAcceptSocket(EndAcceptSocket, tcpListener);
}
~TcpServer()
{
Dispose(false);
}
// blah blah blah
public void Dispose()
{
Dispose(true);
}
private void Dispose(bool disposing)
{
if (this.disposed == false)
{
if (disposing)
{
if (tcpListener != null)
{
tcpListener.Stop();
}
}
this.disposed = true;
}
}
}
Run Code Online (Sandbox Code Playgroud)
WUServer是VB6应用程序创建和使用的COM可见类.它包装TcpServer类,负责反序列化任何接收的数据并使用相关的事件参数引发相应的事件.
public class WUServer : IWUServer
{
private …Run Code Online (Sandbox Code Playgroud) 我最近开始学习C#.我刚刚了解了属性,并决定制作一个简单的程序,以便更好地理解它们.这是我写的代码:
class Dog
{
private int weight;
private string colour;
public string colour { get; set; }
public Dog(int theWeight, string theColour)
{
weight = theWeight;
colour = theColour;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到一个模棱两可的错误.据我所知,这不应该发生.
我有一个模型类,其中包含我从其他类订阅的事件.我想在每个类中正确订阅和取消订阅.
其次除了MyClass之外还有其他类使用OnMyEvent,因此我不想无意中取消订阅该类中的事件.
MyClass(IModel model)
{
_model = model;
_model.OnMyEvent +=EventHandle;
}
Close()
{
_model.OnMyEvent -=EventHandle;
}
Disconnect()
{
//I want to check if OnMyEvent has already unsibscribed
//Moreover OnMyEvent is used in other classes and
//I don't want to mess up with it here
_model.OnMyEvent -=EventHandle;
}
Run Code Online (Sandbox Code Playgroud)我想知道为什么.NET框架没有类似于Java功能的对(Observer/Observable)接口?
编辑: 是的我知道事件和代表,但使用这些接口是一个简单的书本方法这个DP不是吗?
c# ×10
.net ×5
.net-2.0 ×2
events ×2
ambiguity ×1
architecture ×1
com-interop ×1
dispose ×1
input ×1
joystick ×1
memory ×1
properties ×1
string ×1
unity2.0 ×1
vb6 ×1