c#能不能动态增加类成员

时间:2022-08-30 19:52:10
是这样的,我在写一个产品出厂初始化的软件,本人是电工。刚刚开始,问题如下:
    由于产品种类比较多,而且今后还会增加,不同的产品的can通讯协议不一样,我想在界面上添加can参数,然后保存起来。下次直接选产品就行。参数想用序列化类保存(有问过数据库,但是说没必要,小软件),序列化类也可,但是我保存的类里的can参数是慢慢要增加或者减少的,如何实现这一步。能不能再保存的类里有个行为添加或者减少类成员。
    纯属菜鸟,谢谢解答。

8 个解决方案

#1


软件是人发明的,要做什么改造必定可以。

但是刚开始学习,不要学习这种东西。3年以后你必定会做瓷器活,但是现在跟你说那个,就等于毁了你。

你应该学习按照强类型来编程的各种软件知识,从启蒙开始就知道类型设计的重要性。

#2


使用扩展类!

#3


可以,C# 4的动态语法可以运行时扩展一个对象,但是更好的做法是使用动态的、解释执行的语言。因为C#的类库包括IDE环境都不是为动态语言而专门设计的。

#4


引用 1 楼 sp1234 的回复:
软件是人发明的,要做什么改造必定可以。

但是刚开始学习,不要学习这种东西。3年以后你必定会做瓷器活,但是现在跟你说那个,就等于毁了你。

你应该学习按照强类型来编程的各种软件知识,从启蒙开始就知道类型设计的重要性。


我是做单片机的,这个也是为了学习下,能写个简单的通讯软件。谢谢。

#5


引用 2 楼 Trent1985 的回复:
使用扩展类!


好多词听不明白,只有慢慢来了。

#6


引用 3 楼 caozhy 的回复:
可以,C# 4的动态语法可以运行时扩展一个对象,但是更好的做法是使用动态的、解释执行的语言。因为C#的类库包括IDE环境都不是为动态语言而专门设计的。


还是看不明白,慢慢再看了。

#7


动态添加应该不行。类是要预先设计好的。 

如果有变动的属性。比如员工的工资条上的工资项目。则应该换种方法实现。

#8


引用 6 楼 u011301638 的回复:
Quote: 引用 3 楼 caozhy 的回复:

可以,C# 4的动态语法可以运行时扩展一个对象,但是更好的做法是使用动态的、解释执行的语言。因为C#的类库包括IDE环境都不是为动态语言而专门设计的。


还是看不明白,慢慢再看了。


给你一个简单的代码:

dynamic a = new ExpandoObject();
a.Name = "123";
a.ID = 123;
a.CustomValue = new SomeClass();
注意,我们没有定义这么一个类,包含这些属性。
甚至你可以:
a.DoSomething = new Action(() => { Console.WriteLine("DoSomething"); });
a.DoSomething(); //动态定义了一个方法。

#1


软件是人发明的,要做什么改造必定可以。

但是刚开始学习,不要学习这种东西。3年以后你必定会做瓷器活,但是现在跟你说那个,就等于毁了你。

你应该学习按照强类型来编程的各种软件知识,从启蒙开始就知道类型设计的重要性。

#2


使用扩展类!

#3


可以,C# 4的动态语法可以运行时扩展一个对象,但是更好的做法是使用动态的、解释执行的语言。因为C#的类库包括IDE环境都不是为动态语言而专门设计的。

#4


引用 1 楼 sp1234 的回复:
软件是人发明的,要做什么改造必定可以。

但是刚开始学习,不要学习这种东西。3年以后你必定会做瓷器活,但是现在跟你说那个,就等于毁了你。

你应该学习按照强类型来编程的各种软件知识,从启蒙开始就知道类型设计的重要性。


我是做单片机的,这个也是为了学习下,能写个简单的通讯软件。谢谢。

#5


引用 2 楼 Trent1985 的回复:
使用扩展类!


好多词听不明白,只有慢慢来了。

#6


引用 3 楼 caozhy 的回复:
可以,C# 4的动态语法可以运行时扩展一个对象,但是更好的做法是使用动态的、解释执行的语言。因为C#的类库包括IDE环境都不是为动态语言而专门设计的。


还是看不明白,慢慢再看了。

#7


动态添加应该不行。类是要预先设计好的。 

如果有变动的属性。比如员工的工资条上的工资项目。则应该换种方法实现。

#8


引用 6 楼 u011301638 的回复:
Quote: 引用 3 楼 caozhy 的回复:

可以,C# 4的动态语法可以运行时扩展一个对象,但是更好的做法是使用动态的、解释执行的语言。因为C#的类库包括IDE环境都不是为动态语言而专门设计的。


还是看不明白,慢慢再看了。


给你一个简单的代码:

dynamic a = new ExpandoObject();
a.Name = "123";
a.ID = 123;
a.CustomValue = new SomeClass();
注意,我们没有定义这么一个类,包含这些属性。
甚至你可以:
a.DoSomething = new Action(() => { Console.WriteLine("DoSomething"); });
a.DoSomething(); //动态定义了一个方法。