我的问题是:
给定基类:
class BaseClient
{
public BaseClient(string host, string port);
public void Open();
public bool Authenticate();
public void Close();
}
创建对象的实例并建立连接:
BaseClient client = new BaseClient(host, port);
try
{
client.Open();
bool flag = !client.Authenticate();
if (flag)
{
throw new SNException();
}
}
catch (Exception ex)
{
bool flag = client.State == State.Opened;
if (flag)
{
client.Close();
}
}
现在我希望继承BaseClient,并在一个方法connect()中包含Open()和Authenticate()方法。
class ChildClient : BaseClient
{
public ChildClient(string host, string port) : base(string host, string port);
public void connect();
public void disconnect();
}
其中:
public void connect()
{
this.Open();
...
this.Authenticate();
...
}
public void disconnect()
{
this.Close();
}
答案 0 :(得分:0)
1.如何在connect()方法(传播)中使用异常?
如果您无法在connect
内处理错误,例如捕获它并默默返回布尔值false
,请不要做任何事情 - 请保留您的代码原样。
- 我应该使用这个关键字(this.Open()...还是Open()就够了?)
醇>
如果您使用的方法标识符与其他已定义的方法不匹配,则不需要使用 this (例如,using NamespaceWithAuthenticate;
会破坏该方法)。使用 this 来解析方法是隐含的。
答案 1 :(得分:0)
枚举类型
public enum State {OK, WARNING, ERROR, OPENED, CLOSED};
初始化Exception类的新实例。
internal class SNException : Exception
{
private State _state;
public State GetState
{
get { return this._state; }
}
public SNException()
{
}
public SNException(State state)
{
this._state = state;
}
public SNException(string message)
: base(message)
{
}
public SNException(string message, Exception innerException)
: base(message, innerException)
{
}
protected SNException(System.Runtime.Serialization.SerializationInfo info, System.Runtime.Serialization.StreamingContext context)
: base(info, context)
{
}
}
BaseClient类
class BaseClient
{
private string host = "";
private string port = "";
public BaseClient(string host, string port)
{
this.host = host;
this.port = port;
}
public void Open()
{
throw new SNException(State.CLOSED);
}
public bool Authenticate()
{
return false;
}
public void Close()
{}
}
类BaseClient inhertis基于BaseClient类
class ChildClient : BaseClient
{
public ChildClient(string host, string port) : base(host, port)
{
}
public bool connect()
{
this.Open();
return this.Authenticate();
}
public void disconnect()
{
this.Close();
}
}
调用对象
ChildClient childClietn = new ChildClient("host", "port");
try
{
bool result = childClietn.connect();
}
catch (SNException ex)
{
var st = ex.GetState;
}
finally
{
childClietn.disconnect();
}
this 关键字引用类的当前实例,并且还用作扩展方法的第一个参数的修饰符。
public BaseClient(string host, string port)
{
this.host = host;
this.port = port;
}
如果方法或构造函数中的此参数与对象中的变量具有相同的名称,则需要明确指出在何处指定值。