用隐式转换实现类型或结构体直接赋值

在vs中敲一句string s="aaa";

你会发现string是个class,一般咱们给类型赋值的时候都是先new一个,然后再给其属性赋值,string却能直接赋值,顿时感觉很神奇

当然,在stirng s = "aaa";中,右面的“aaa”它其实就是个string类型,所以直接=是没有问题的

但是,由string s ="aaa";我们就可以提出一个假象,咱们自己定义的class能不能也实现类似的效果呢?

答案显然是肯定的~~~~

这需要用到C#的隐式转换功能,结构体也能实现

public partial class Form1 : Form
    {
        class MyString
        {
            public string str { get; set; }

            public static implicit operator MyString(string s)
            {
                MyString ms = new MyString();
                ms.str = s;
                return ms;
            }

            public static implicit operator string(MyString ms)
            {
                return ms.str;
            }
        }

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            MyString m = "asdfasdfasdfasdf";
            MessageBox.Show(m);
        }
    }
时间: 2024-11-05 03:30:19

用隐式转换实现类型或结构体直接赋值的相关文章

Scala入门到精通——第十八节 隐式转换与隐式参数(一)

本节主要内容 隐式转换简介 隐式转换函数 隐式转换规则 隐式参数 1. 隐式转换简介 在scala语言当中,隐式转换是一项强大的程序语言功能,它不仅能够简化程序设计,也能够使程序具有很强的灵活性.要想更进一步地掌握scala语言,了解其隐式转换的作用与原理是很有必要的,否则很难得以应手地处理日常开发中的问题. 在scala语言中,隐式转换是无处不在的,只不过scala语言为我们隐藏了相应的细节,例如scala中的类继承层次结构中: 它们存在固有的隐式转换,不需要人工进行干预,例如Float在必要

Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL

Atitit.变量的定义 获取 储存 物理结构 基本类型简化 隐式转换 类型推导 与底层原理 attilaxDSL 1.1. $ 美元字符, php 黑头1 1.2. 默认变量的范围和声明:1 1.3. 变量的存储,储存在变量池里Map(varName,varVal)1 1.3.1. 复合变量1 1.4. 变量类型简化: 字符串 数字,  bool1 1.5. 变量自动隐式转换2 1.6. 类型推导2 2. 参考 复合变量2 1.1. $ 美元字符, php 黑头 1.2. 默认变量的范围和声明

隐式转换——内置数据类型

概述 隐式转换是指在初始化或赋值或函数调用时编译器隐式完成的不同类型之间的转换 常量转内置类型 对于没有任何常量后缀的整型或者浮点型在进行初始化或赋值或作为函数实参传递时需要进行常量类型匹配 整型 int->long int顺序匹配 浮点型 默认都是double类型 用常量初始化或者赋值给内置类型变量时,编译器会判断常量的值是否在内置类型变量取值范围内,如果在内置类型变量取值范围内,编译器会正确初始化或者赋值,否则,编译器会给出警告提示 内置类型之间转换 布尔型转算术类型(整型和浮点型) tru

无法确定条件表达式的类型,因为Datetime和<null>之间没有隐式转换

Q: var a=isFilter ? ta.EndDate : null; Error:无法确定条件表达式的类型,因为Datetime和<null>之间没有隐式转换 ta.EndDate是DateTime类型,不能与null选择: A: var a=isFilter ? ta.EndDate : (DateTime?)null;//加在ta.EndDate也是可以的.

利用implicit关键字做自定义类型隐式转换

在C#中,implicit关键字可以用来做自定义类型隐式转换.下面给个例子来说明. 先定义一个Point类,表示一个点: public class Point { public double X { get; set; } public double Y { get; set; } } 再在Point类中定义一个静态方法,用于由字符串隐式转换为Point类型: public class Point { public double X { get; set; } public double Y {

oracle 表字段类型,与业务SQL不合理,导致的隐式转换

今天遇到一个生产问题,业务SQL很简单,单表查询,而且表只有三个字段,有个主键ID,而且通过主键ID过滤,业务页面会传一百多个ID过来调用SQL,这个表数据量大小为100多万,但是偏偏这条SQL执行跑了15秒,完全影响业务不能使用. select a,b,c from t where t.id in (1111,222,333,444,555..........) 我一开始并没有去查看表设计,而是直接看了执行计划, 1 alter session set statistics_level=all

MySQL SQL优化之字符串索引隐式转换

之前有用户很不解:SQL语句非常简单,就是select * from test_1 where user_id=1 这种类型,而且user_id上已经建立索引了,怎么还是查询很慢? test_1的表结构: CREATE TABLE `test_1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` varchar(30) NOT NULL, `name` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`),

关于MySQL隐式转换

一.如果表定义的是varchar字段,传入的是数字,则会发生隐式转换. 1.表DDL 2.传int的sql 3.传字符串的sql 仔细看下表结构,rid的字段类型: 而用户传入的是int,这里会有一个隐式转换的问题,隐式转换会导致全表扫描. 把输入改成字符串类型,执行计划如下,这样就会很快了. 此外,还需要注意的是: 数字类型的0001等价于1 字符串的0001和1不等价 二.如果表定义的是int字段,传入的是字符串,在不超过int范围内,不会发生隐式转换,如果超出范围并且比较大小(以字符串类型

C++ 语言中的重载、内联、缺省参数、隐式转换等机制展现了很多优点

C++ 语言中的重载.内联.缺省参数.隐式转换等机制展现了很多优点,但是这些 优点的背后都隐藏着一些隐患.正如人们的饮食,少食和暴食都不可取,应当恰到好处. 我们要辨证地看待 C++的新机制,应该恰如其分地使用它们. 虽然这会使我们编程时多 费一些心思,少了一些痛快,但这才是编程的艺术. 1 #include <iostream> 2 3 /* run this program using the console pauser or add your own getch, system(&qu