在一个项目中遇到了一个关于匿名类型的坑
在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 关键字是类型和类型成员的访问修饰符。只有在同一程序集的文件中,内部类型或成员才是可访问的。
网友评论