c#抽象,虚方法,重写,接口,约束的使用,让代码看起来规范简洁,减少if的使用
基础参数
interface,abstract,virtual,override
然后实现了这样的效果
同一个方法,调用不同的实现类,那实现不一样的结果
具体代码
public interface IStatsBase { string UserSpeak(string content); string UserHandel(string content); } public interface IUserStatsBase { string UserLook(string content); } public abstract class UserStatsBase : IUserStatsBase, IStatsBase { protected abstract string Name { get; } public virtual string UserHandel(string content) { return $"{Name}做:{content}"; } public virtual string UserSpeak(string content) { return $"{Name}说:{content}"; } public virtual string UserLook(string content) { return $"{Name}看:{content}"; } } public class XiaoHongStats : UserStatsBase { protected override string Name => "小红"; public override string UserHandel(string content) { StringBuilder str = new StringBuilder(); str.AppendLine(UserSpeak("我那去扫地")); str.AppendLine("去扫地了"); return str.ToString(); } } public class ZhangSangStats : UserStatsBase { protected override string Name => "张三"; public override string UserSpeak(string content) { return $"{Name}说:{content},并且带着大家去做"; } }
二次封装使用,使用泛型约束(可以ioc)
public class UserStatsBaseSdk<IUser> where IUser : IUserStatsBase { protected readonly IUser _repository;
public UserStatsBaseSdk(IUser repository) { _repository = repository; } public string Test(string content) { StringBuilder srr = new StringBuilder(); srr.AppendLine(_repository.UserLook(content)); srr.AppendLine(_repository.UserSpeak(content)); srr.AppendLine(_repository.UserHandel(content)); return srr.ToString(); } }
使用方式
var dd = new UserStatsBaseSdk<IUserStatsBase>(xiaohong);
最后的效果是
或者再继承,使用base