当前位置: 首页 > news >正文

做女装的网站站长之家网站

做女装的网站,站长之家网站,昆明信息港官网,秦皇岛住房和城乡建设网官网c#中的约束 在C#中,约束(Constraints)用于限制泛型类型参数的类型,以确保泛型类型或方法在编译时能够满足特定的要求。约束允许开发者指定泛型类型参数必须满足的条件,比如实现特定的接口或继承自特定的类。以下是一些…

c#中的约束

在C#中,约束(Constraints)用于限制泛型类型参数的类型,以确保泛型类型或方法在编译时能够满足特定的要求。约束允许开发者指定泛型类型参数必须满足的条件,比如实现特定的接口或继承自特定的类。以下是一些常见的约束类型:

  1. 类类型约束 (classstruct):

    • class 约束指定类型参数必须是引用类型。

    • struct 约束指定类型参数必须是值类型。

    public class MyClass<T> where T : class
    {// T 必须是引用类型
    }

  2. 接口约束 (interface):

    • 接口约束指定类型参数必须实现一个或多个特定的接口。

    public interface IInterfaceA { }
    public interface IInterfaceB { }
    ​
    public class MyGenericClass<T> where T : IInterfaceA, IInterfaceB
    {// T 必须同时实现 IInterfaceA 和 IInterfaceB
    }

  3. 构造函数约束 (new()):

    • 构造函数约束指定类型参数必须有一个无参数的公共构造函数。

    public class MyGenericClass<T> where T : new()
    {public T CreateInstance() => new T();// T 必须有一个无参数的公共构造函数
    }

  4. 基类约束 (: BaseType):

    • 基类约束指定类型参数必须是指定基类的子类。

    public class MyBaseClass { }
    ​
    public class MyGenericClass<T> where T : MyBaseClass
    {// T 必须是 MyBaseClass 的子类
    }

  5. 多个约束:

    • 可以对类型参数应用多个约束,它们可以组合使用。

    public class MyGenericClass<T> where T : class, IInterfaceA, new()
    {// T 必须是引用类型,实现 IInterfaceA 接口,并有一个无参数的公共构造函数
    }

  6. 类型参数默认值约束 (default):

    • 从C# 8.0开始,可以使用 default 约束来指定类型参数必须有一个可用的默认实现。

    public class MyGenericClass<T> where T : IInterfaceA = default(T)
    {// T 必须实现 IInterfaceA 接口,并且有一个可用的默认实现
    }

TimeSpan

在C#中,TimeSpan 是一个结构体(struct),用于表示两个 DateTime 对象之间的时间差,或者表示一个持续时间。TimeSpan 结构体包含了时间的天、小时、分钟、秒和毫秒部分。

TimeSpan 提供了多种方法来创建和操作时间间隔,例如:

  • TimeSpan.FromSeconds(double):根据秒数创建 TimeSpan

  • TimeSpan.FromMinutes(double):根据分钟数创建 TimeSpan

  • TimeSpan.FromHours(double):根据小时数创建 TimeSpan

  • TimeSpan.FromDays(double):根据天数创建 TimeSpan

此外,TimeSpan 也支持算术运算,如加法和减法,以及与其他 TimeSpan 结构体的比较。

这里是一个简单的使用 TimeSpan 的示例:

// 创建一个表示2小时30分钟的时间间隔
TimeSpan interval = new TimeSpan(2, 30, 0);
​
// 创建一个表示15秒的时间间隔
TimeSpan shortInterval = TimeSpan.FromSeconds(15);
​
// 计算两个DateTime之间的时间差
DateTime start = new DateTime(2024, 1, 1);
DateTime end = new DateTime(2024, 1, 2);
TimeSpan duration = end - start;

TimeSpan 结构体是不可变的,这意味着一旦创建了一个 TimeSpan 实例,它的值就不能被修改。任何修改操作都会返回一个新的 TimeSpan 实例。

c#中的defult

在C#中,default 关键字用于获取一个类型的默认值。每种类型的默认值定义如下:

  • 对于值类型(例如 int, double, struct),默认值是将所有位都设置为0。例如,int 的默认值是 0double 的默认值是 0.0

  • 对于引用类型(例如 class, string),默认值是 null

  • 对于 bool 类型,没有默认值,因为 bool 是一个值类型,并且它只有两个可能的值:truefalse

  • 对于 Nullable<T> 类型(可以为 null 的类型),默认值是 null

使用 default 关键字可以提高代码的可读性和可维护性,特别是当你需要初始化一个变量到其类型的默认值时。例如:

int number = default(int); // 初始化为 0
string text = default(string); // 初始化为 null
double value = default(double); // 初始化为 0.0

此外,default 也可以用于泛型类型参数,编译器会根据类型参数推断出正确的默认值:

List<T> list = new List<T>();
T item = default(T); // 根据 T 的类型,编译器推断出默认值

default 关键字是一个表达式,它在编译时确定类型,并在运行时返回该类型的默认值。

c#中operator

在C#中,operator 关键字用于定义和重载运算符,使得自定义类型可以像内置类型一样使用标准的运算符,如 +, -, ==, != 等。这提高了代码的可读性和一致性。

以下是一些常见的运算符重载示例:

  1. 一元运算符:如 +, -, !, ++, --

    public struct Point
    {public int X { get; set; }public int Y { get; set; }
    ​public static Point operator +(Point p1, Point p2){return new Point { X = p1.X + p2.X, Y = p1.Y + p2.Y };}
    ​public static Point operator -(Point p){return new Point { X = -p.X, Y = -p.Y };}
    }

  2. 二元运算符:如 +, -, *, /, %, ==, !=

    public static bool operator ==(Point p1, Point p2)
    {return p1.X == p2.X && p1.Y == p2.Y;
    }
    ​
    public static bool operator !=(Point p1, Point p2)
    {return !(p1 == p2);
    }

  3. 递增和递减运算符++--

    public class Counter
    {private int _value;
    ​public int Value{get { return _value; }set { _value = value; }}
    ​public static Counter operator ++(Counter c){c._value++;return c;}
    ​public static Counter operator --(Counter c){c._value--;return c;}
    }

  4. 关系运算符<, >, <=, >=

    public class Fraction
    {private int _numerator;private int _denominator;
    ​public static bool operator <(Fraction f1, Fraction f2){// 实现比较逻辑}
    ​public static bool operator >(Fraction f1, Fraction f2){// 实现比较逻辑}
    }

  5. 赋值运算符=

    public class MyClass
    {public int Value { get; set; }
    ​public static MyClass operator =(MyClass a, int value){a.Value = value;return a;}
    }

  6. 逻辑运算符&&, ||

    public class BooleanWrapper
    {private bool _value;
    ​public static BooleanWrapper operator &&(BooleanWrapper b1, BooleanWrapper b2){return new BooleanWrapper { _value = b1._value && b2._value };}
    ​public static BooleanWrapper operator ||(BooleanWrapper b1, BooleanWrapper b2){return new BooleanWrapper { _value = b1._value || b2._value };}
    }

重载运算符时,需要遵循一些规则和最佳实践:

  • 运算符重载应该是直观的,并且与内置类型的行为一致。

  • 重载的运算符应该保持对称性,例如,如果重载了 ==,也应该重载 !=

  • 重载 ==!= 时,也应该重载 GetHashCodeEquals 方法。

  • 重载 + 时,也应该考虑重载 - 以及可能的 +=-=

  • 避免重载 &, |, &=, |= 等位运算符,除非你的类型是位字段。

http://www.yayakq.cn/news/982626/

相关文章:

  • 网站icp备案需要多久做直播网站要多少钱
  • 服装网站建设天元网游关服了吗
  • 淄博网站搜索排名网页版qq音乐登录入口
  • 网站开发背景和目的中小企业网站建设与管理课件百度云
  • 手机网站在哪里找到建行移动门户官网
  • 发号网站源码中国保密在线培训网站
  • 工信部怎么查网站备案信阳企业网站建设
  • 商洛做网站的公司容易收录的网站
  • 全国企业名录北京网络排名优化
  • 网站开发使用数据库的好处php网站开发进程
  • 濮阳网站建设熊掌网络爱吖网
  • 吉林公司做网站梦幻西游网页版官方网站
  • 网站站外推广的内外链接怎么做绵阳东原建设工程有限公司网站
  • 慕课网电子商务网站开发某网站搜索引擎优化
  • 网站建设开发程序代码网络服务提供者不是网络运营者对不对
  • 自动全屏网站模板外贸网站有必要吗
  • 做网站设计用什么软件网站发帖推广平台
  • 类似猪八戒的网站建设域名解析网站登录
  • 做汽车英文网站做网站租服务器多少钱
  • 广州天河区网站建设公司石景山网站seo优化排名
  • 手机网站适合分开做深圳宝安美容医院网站建设
  • 企业先做网站还是先做淘宝wordpress临时关闭站点
  • 二建转注辽宁建设主管部门网站如何让网站关键词搜录
  • 本地南昌网站建设慈利网站建设
  • 怎样做微课网站wordpress点击分享功能
  • 广东一站式网站建设推荐inovation wordpress
  • 外面网站怎么做的公司市场营销策划方案
  • 刚注册在域名可以自己做网站吗wordpress auto spinner
  • 建网站的系统展示型网站有哪些
  • 全国城市雕塑建设官方网站个性化网站建设