zoukankan      html  css  js  c++  java
  • 自定义类型转化

    string num1 = "12";
    string num2 = "13";
    int num3;
    int num4 = 77;
    bool bo;
    num3 = int.Parse(Convert.ToString(num2));
    bo = int.TryParse(Convert.ToString(num1), out num4);

    Console.Write(num3 +","+bo +","+num4 );

    int.TryParse(string ,out int ) //把string 字符串转化为int类型。成功返回true,失败返回false. int 型参数成功返回转化过的值,失败返回0。
    int.Parse(string ); //把string 参数转化为int值。
    1。字符串为空,抛出ArgumentNullException异常。
    2.不是数字,抛出FormatException
    3.数字超出int 型范围。抛出OverflowException


    自定义类型转化。
    operator:
    public static result-type unary-operator(op-type operand) //一元运算符重载
    public static result-type binary-operator(op-type operand ,op-type2 operand2) //二元运算符重载
    implicit://隐性转化
    public static implicit operator conv-type-out (conv-type-in operand)
    explicit://显示转化
    public static explict operator conv-type-out(conv-type-in operand)

    1.result-type 运算符的结果类型。
    2.unary-operator 下列运算符之一:+ - ! ~ ++ — true false
    3.op-type 第一个(或唯一一个)参数的类型。
    4.operand 第一个(或唯一一个)参数的名称。
    5.binary-operator 其中一个:+ - * / % & | ^ << >> == != > < >= <=
    6.op-type2 第二个参数的类型。
    7.operand2 第二个参数的名称。
    8.conv-type-out 类型转换运算符的目标类型。
    9.conv-type-in 类型转换运算符的输入类型。


    DEMO:
    public struct Student
    {

    private uint yuan;

    public uint Yuan
    {
    get { return yuan; }
    set { yuan = value; }
    }
    private uint jiao;

    public uint Jiao
    {
    get { return jiao; }
    set { jiao = value; }
    }
    private uint fen;

    public uint Fen
    {
    get { return fen; }
    set { fen = value; }
    }

    public Student(uint yuan,uint jiao,uint fen)
    {
    if (fen > 9)
    {
    jiao += fen / 10;
    fen = fen % 10;

    }
    if (jiao > 9)
    {
    yuan += jiao / 10;
    jiao = jiao % 10;

    }
    this.yuan = yuan;
    this.jiao = jiao;
    this.fen = fen;
    }
    public override string ToString()
    {
    return string .Format("${0}元{1}角{2}分",Yuan ,Jiao ,Fen );
    }
    public static Student operator +( Student s1,Student s2)
    {
    return new Student(s1.Yuan + s2.Yuan, s1.Jiao + s2.Jiao, s1.Fen + s2.Fen);
    }
    public static explicit operator float(Student s1)
    {
    return s1.Yuan +(s1.Jiao /10.0f)+(s1.Fen /100.0f);
    }
    public static explicit operator Student (float f)
    {
    uint yuan = (uint)f;//uint 转化性能好,Convert.ToUInt32精度好,但有性能 损失。
    uint jiao = (uint)((f - yuan) * 10);
    uint fen = Convert.ToUInt32(((f-yuan )*100)%10);
    return new Student(yuan,jiao,fen );
    }
    }
    class Program
    {
    static void Main(string[] args)
    {

    Student s1, s2,s3,S4;
    s1 = new Student(11,11,11);
    s2 = new Student(5, 5, 5);
    s3 = s1 + s2;
    float f = (float )s3;
    S4 = (Student )f;


    Console.Write(s3 +","+s3.ToString() +","+f +","+S4 );


    Console.ReadKey();

    }
    }

  • 相关阅读:
    Unity3D游戏-愤怒的小鸟游戏源码和教程(一)
    Unity插件-ShareSDK使用指南
    Unity 3D开发-C#脚本语言的一些基础用法
    Shader的函数公式以及使用的场景
    Shader的基本用法和语法结构
    iTween的用法总结
    Unity 3D游戏-消消乐(三消类)教程和源码
    Unity 3D游戏-NPC对话系统With XML
    XML教程、语法手册、数据读取方式大全
    ReSharper2017.3的列对齐、排版格式、列对齐错误的修复
  • 原文地址:https://www.cnblogs.com/zhubenxi/p/5222554.html
Copyright © 2011-2022 走看看