• 全部
...

今天看到一个很奇葩的写法,抽象类内部全是静态方法

abcbuzhiming 2011-08-16 05:48:26

  1. public abstract class DbHelperOleDb
  2. {
  3. //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.
  4. public static string connectionString = PubConstant.ConnectionString;
  5. public DbHelperOleDb()
  6. {
  7. }


  8. #region 公用方法

  9. public static int GetMaxID(string FieldName, string TableName)
  10. {
  11. string strsql = "select max(" + FieldName + ")+1 from " + TableName;
  12. object obj = GetSingle(strsql);
  13. if (obj == null)
  14. {
  15. return 1;
  16. }
  17. else
  18. {
  19. return int.Parse(obj.ToString());
  20. }
  21. }
  22. public static bool Exists(string strSql)
  23. {
  24. object obj = GetSingle(strSql);
  25. int cmdresult;
  26. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  27. {
  28. cmdresult = 0;
  29. }
  30. else
  31. {
  32. cmdresult = int.Parse(obj.ToString());
  33. }
  34. if (cmdresult == 0)
  35. {
  36. return false;
  37. }
  38. else
  39. {
  40. return true;
  41. }
  42. }
  43. public static bool Exists(string strSql, params OleDbParameter[] cmdParms)
  44. {
  45. object obj = GetSingle(strSql, cmdParms);
  46. int cmdresult;
  47. if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  48. {
  49. cmdresult = 0;
  50. }
  51. else
  52. {
  53. cmdresult = int.Parse(obj.ToString());
  54. }
  55. if (cmdresult == 0)
  56. {
  57. return false;
  58. }
  59. else
  60. {
  61. return true;
  62. }
  63. }



我表示非常不解,要做全局方法的话用静态方法是没错,但是为什么要塞入到一个抽象类里,难道写这代码的人打算从某处继承这个抽象类(从源代码的其它部分看这个类没有被继承过),可全是静态方法的抽象类有什么好继承的呢,一般造就全局方法的方式不是静态类+静态方法吗?我是头一次见到抽象类+静态方法的组合,放狗没搜出这样做的理由来,感觉特别奇葩,这样做有啥特别意义?
...全文
给本帖投票
543 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
至尊贱客 2011-08-17
  • 打赏
  • 举报
回复
又没什么奇怪的。。。。纯属个人风格吧
ycproc 2011-08-16
  • 打赏
  • 举报
回复
看不到什么神奇之处
hangang7403 2011-08-16
  • 打赏
  • 举报
回复
应该是设计上的个人风格,也可以用static
ay_guobo 2011-08-16
  • 打赏
  • 举报
回复
学习了~什么时候也尝试一下
csproj 2011-08-16
  • 打赏
  • 举报
回复
刚试了
abstract sealed
static sealed 都不能一起用。

本来静态类就不能继承 用sealed 多此一举了
csproj 2011-08-16
  • 打赏
  • 举报
回复
用了sealed 也可以用static关键字

不知道sealed 和abstract 可不可以一起用,一会试下
csproj 2011-08-16
  • 打赏
  • 举报
回复
防止new ,
用static 和抽象类都可以


用sealed和这里的要求就不一样了吧
sealed只是不能继承,一样可以new
Just4life 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 vrhero 的回复:]

引用 4 楼 icedmilk 的回复:
我感觉他的意图是不希望使用者创建DbHelperOleDb的实例
abstract可以实现他的意图

不过更标准的做法是staic class关键词吧

工具类没有什么标准,我更喜欢用sealed...纯属个人习惯,没有优劣之分...
[/Quote]

支持使用sealed
vrhero 2011-08-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 icedmilk 的回复:]
我感觉他的意图是不希望使用者创建DbHelperOleDb的实例
abstract可以实现他的意图

不过更标准的做法是staic class关键词吧
[/Quote]
工具类没有什么标准,我更喜欢用sealed...纯属个人习惯,没有优劣之分...
Icedmilk 2011-08-16
  • 打赏
  • 举报
回复
我感觉他的意图是不希望使用者创建DbHelperOleDb的实例
abstract可以实现他的意图

不过更标准的做法是staic class关键词吧
vrhero 2011-08-16
  • 打赏
  • 举报
回复
没什么特别...和一般的静态工具类一样,设计时就没打算让人继承...很久以前微软的示例代码里都有这种用法...
catchdream 2011-08-16
  • 打赏
  • 举报
回复
可能是为了避免有人实现这个静态类得实例调用方法,不过这好像也没啥特殊用途。猜的。。
stonespace 2011-08-16
  • 打赏
  • 举报
回复
静态方法可能是提供给派生类调用吧,

111,090

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧

手机看
关注公众号

关注公众号

客服 返回
顶部