C#中的匿名类型

​ 在一个项目中遇到了一个关于匿名类型的坑

在C#中的匿名类型是这样创建的:

new {Id = 1, Name = "Tom", Psw = "123"};

而这些匿名类型的属性是internal的,所以是只有在同一程序集才能使用。

​ 在一个项目中我使用了dynamic去声明了一个参数,并且跨程序集调用了此方法,则会抛出异常: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException :object类中未包含Id的定义

//在一个项目添加此代码
using System;
namespace DynamicDemo {
    class Program {
        static void Main(string[] args) {
            var user = new { Id = 1, name = "Tom", psw = "123" };
            LoginInter(user);
            Demo.Demo.Login(user);
            Console.ReadKey();
        }
        public static void LoginInter(dynamic user) {
            Console.Write(user.Id + user.name + user.psw);
        }
    }
}

//在另一个项目中添加此代码  生成的程序集是Demo.dll
using System;
namespace Demo {
    public class Demo {
        public static void Login(dynamic user) {
            Console.Write(user.Id + user.name + user.psw);//抛出异常
        }
    }
}

public 关键字是类型和类型成员的访问修饰符。公共访问是允许的最高访问级别,对访问公共成员没有限制。

protected 关键字是一个成员访问修饰符。受保护成员在它的类中可访问并且可由派生类访问。

private 关键字是一个成员访问修饰符。私有访问是允许的最低访问级别。私有成员只有在声明它们的类和结构体中才是可访问的。

internal 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,252评论 9 118
  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,240评论 1 44
  • 136.泛型 泛型代码让你可以写出灵活,可重用的函数和类型,它们可以使用任何类型,受你定义的需求的约束。你可以写出...
    无沣阅读 1,498评论 0 4
  • 把禅绕艺术融入日常,感受更多美好。 跟九月说句明年再见:) 前些日子去闺蜜家的新房子小住了几天,几层楼的家舒适开阔...
    ___Zoe___阅读 380评论 0 4
  • 大公益行动: 7月28日16:00 国胜 秀峰走访鄂州市市政府团市委共青团办公室,3位官方人士接待,由:尹主任接待...
    周秀峰阅读 124评论 0 1