c#里的get和set访问器,不写和只写get+set有区别吗?

get和set访问器可以提供验证功能,也可以设置属性的只读,有很多功能。但是,很多属性只写get和set,没有方法体,例如:
public int BufferSize { get; set; }
这样的话跟不写get和set,即
public int BufferSize;
有什么区别啊?反正是都能读写,也没什么其它附加功能。请大神指教,实在是想不明白。。。

c#

2个回答

一个是字段,一个是属性,字段和属性的概念你应该知道吧

u011574838
a516117636 知道,说说具体的有什么区别啊,用法上,我觉得一样
接近 3 年之前 回复

首先从两者的声明上来看,公共字段只是类用public修饰符所公开的简单公共变量,而属性则是对字段的封装,它使用get和set访问器来控制如何设置或返回字段值。

由于属性的实质是方法(get或set方法),在IL中是没有属性的概念的。所以对于开发过程中常用的赋值和取值操作来说,使用公共变量肯定会比使用属性速度要快,性能上也稍高(方法和变量哪个速度不用说了吧)。

公共字段虽然在速度上快,但它必须开放字段为public,这样一来对象的调用者便可以直接修改其值,值的内容是否合法,运行中是否会出错,就没有了保障,进而会大大降低类的可重用性;相反,属性类似于方法,它可以对存入的变量的值进行处理,如果觉得该值不合法,可以就地变换或者直接提出警告。这对该类的对象的使用安全有很大好处,在运行过程中,因公共变量值的错误而产生的问题会大大减少。

从上述内容来看,两者各有优缺点,在实际项目开发过程中,我们究竟选择使用哪一种方式呢?

如果满足下面几个条件,那么我们便可以大胆地使用公共字段:

1. 允许自由读写;

2. 取值范围只受数据类型约束而无其他任何特定限制;

3. 值的变动不需要引发类中其它任何成员的相应变化;

属性的使用条件则恰好跟变量相反,只要满足下面任何一个条件,就应该使用属性:

1. 要求字段只能读或者只能写;

2. 需要限制字段的取值范围;

3. 在改变一个字段的值的时候希望改变对象的其它一些状态;

qq_29099439
qq_29099439 此回复专业相信并且有耐心,值得推荐
大约 2 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
c#里的get和set访问器,不写和只写get+set有区别吗?
get和set访问器可以提供验证功能,也可以设置属性的只读,有很多功能。但是,很多属性只写get和set,没有方法体,例如: public int BufferSize { get; set; } 这样的话跟不写get和set,即 public int BufferSize; 有什么区别啊?反正是都能读写,也没什么其它附加功能。请大神指教,实在是想不明白。。。
C#通过get set进行计算
老师给的题目,已知三角形的三边,在claas 三角形里面只使用getset计算三角形面积。求代码。![图片](https://img-ask.csdn.net/upload/201609/27/1474984780_276552.png)
C#静态类中的静态数组相关
我在静态类中定义一个静态数组,但是想在该类中初始化这个数组,也就是给数组赋值。 ``` public static class GlobalCont { private const int ITEMNUM = 20; private static string[] itemname; public static string[] Itemname { get { return GlobalCont.itemname; } set { for (int i = 0; i < ITEMNUM; i++) { itemname[i]=APPL.Properties.Resources.ResourceManager.GetString("str"+String.Format("{0:D3}",i)); } } } } ``` 1.我想知道怎样可以赋值,使得在别的类中调用该数组时已经是被初始化过的。 2.我想知道重新封装一个属性时set有什么用途,可以用来初始化数据吗?(我大概知道这里的写法是有误的,但是不会用)
c# 对象属性修改事件无法触发
求指点:遇到这样的事件无法触发的情况,不清楚原因:一个类A里包含一个list成员,类型为另外一个自定义类B,B里包含一个属性修改事件,这个A的对象修改list成员为什么不会触发属性修改事件。 public class A{ public List<B> mylist=new List<B>(); public A(){ for (int i = 0; i < 4; i++) mylist.Add(new B()); } } public class B: INotifyPropertyChanged{ private string _Color; public string Color { get { return _Color; } set { _Color = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs("Color")); Debug.WriteLine(_Color);//执行不到这里 } } public event PropertyChangedEventHandler PropertyChanged; } pulic partial class Main{ public main(){ A a=new A(); a.mylist[0].PropertyChanged+=B_PropertyChanged; a.mylist[0].Color="#123456"; } private void B_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) { Debug.WriteLine(e); //? not invoke? } }
C#中普通类中的静态类成员不能自动实例化后调用,需要显式实例化?
在VS2015版本的C#,在一个大类中(Atest),声明一系列的静态成员类(Btest)。 意图实现无需实例化下,调用Btest的方法及成员。也就是普遍的全局变量; 但一直实现不了。大类(Atest)为普通类不可以,声明为Static也不可以。 烦请大神解答一下。 感谢老马的回复! 在段码增补后是可以运行了。是不说,普通类内部定义的静态类成员必须显式实例化后,才可以使用。并且是唯一的?而不是像一些资料中声明的,可以自动实例化? 代码如下: ``` using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.WriteLine("程序开始");//程序开始 **_ if (Atest.BtestC == null) //检测未实例化下的状态 { Atest.BtestC = new Btest(); }**_ if (Atest.BtestC == null) //检测未实例化下的状态 { Console.WriteLine ("普通类的成员:静态类为空"); } //运行为无数据 else { Atest.BtestC.Ashow (); } Console.WriteLine(Atest.AAid);//显示为空 Atest.AAid = "已设置Atest.AAid"; //检测静态字符串变量 Console.WriteLine(Atest.AAid);//显示有数据 Atest NAtest = new Atest("实例化Atest"); Console.WriteLine(NAtest.Aid);//显示实例化后的标志 if (Atest.BtestC == null) //检测实例化下的类中状态 { Console.WriteLine("普通类的成员:静态类为空"); } //运行为无数据 else { Atest.BtestC.Ashow(); } //NAtest.BtestC.Ashow(); 此种方式不可以调用 Console.Read(); } } public class Atest { public static Btest BtestC { get; set; } public static String AAid { get; set; } public string Aid { get; set; } public Atest() { Aid = "Default"; } public Atest(string NAid ) { Aid = NAid; } } public class Btest { public string Bid { get; set; } public Btest() { Bid = "Default"; } public Btest(string BBid ) { Bid = BBid; } public void Ashow() { //Console.WriteLine(Bid); Console.WriteLine("Btest.Ashow"); } } } ```
CefSharp75 怎样用JS调用C#
Form cs代码 ``` CefSharpSettings.LegacyJavascriptBindingEnabled = true; browser.RegisterJsObject("boud", new JsEvent(),new CefSharp.BindingOptions() { CamelCaseJavascriptNames = false }     public class JsEvent     {         public string MessageText { get; set; }         public void ShowTest()         {             MessageBox.Show("this in c#.\n\r");         } public string Hello(string name) { return "Hello " + name; }         public void ShowTestArg(string ss)         {             MessageBox.Show("收到Js参数的调用\n\r"+ss);         }     } ``` js代码 boud.Hello("aaa").then((r) => { alert(r); }) boud.ShowTest() 加上 CefSharp.BindObjectAsync("boud"); 也不可以 都是提示 boud is not defined CefSharp is not defined
C#封装字段问题:两者的区别
(1) private int a; public int A { get { return a; } set { a = value; } } (2) public int a { get; set; } 这两者分别什么意思?有什么区别?
C# 用反射,怎么获取 类的 类成员的 成员
如: class A { string name{get;set;} class B { string name{get;set;} } } 要获取 B.name ,C# 代码要怎么写,,,
C#中自定义了一个类实例化后,系统判定对象为空
**我定义了一个类Item** ``` public class Item : MonoBehaviour { public int ID { get; set; } public string Name { get; set; } public ItemType Type { get; set; } public string Description { get; set; } public int SellPrice { get; set; } public int BuyPrice { get; set; } public Sprite Sprite { get; set; } public Item(int _id,string _name,ItemType _type,string _description,int _sellprice,int _buyprice,Sprite _sprite) { this.ID = _id; this.Name = _name; this.Type = _type; this.Description = _description; this.SellPrice = _sellprice; this.BuyPrice = _buyprice; this.Sprite = _sprite; } public Item() { this.ID = -1; } } ``` **然后实例化出来一个item对象** ``` Item temp=new Item( (int)jsonData[i]["id"], jsonData[i]["name"].ToString(), (ItemType)System.Enum.Parse(typeof(ItemType), jsonData[i]["type"].ToString()), jsonData[i]["description"].ToString(), (int)jsonData[i]["sellprice"], (int)jsonData[i]["buyprice"], Resources.Load<Sprite>(jsonData[i]["sprite"].ToString()) ``` **用Debug.Log(temp==null);语句判断出来的结果是true,也就是对象为空,但是Debug.Log(temp.Description);语句输出对象的属性又能够得到正确信息。** 请问有没有大佬知道原因??求告知,谢谢
【提问】VS2015里面Web项目的 启用C#6 / VB14 是干嘛用的
点这个就会从nuget下一个Microsoft.CodeDom.Providers.DotNetCompilerPlatform的包 谷歌搜说是用来支持C#6新特性的 但是我新建项目 ,没有 “启用C#6 / VB14” 也可以使用c#6新特性,比如 public string Name { get; set; } = "Smith"; 并且也可以编译通过。 那么请问这个包以及这个启用c#6是干嘛的呢?
c#将一个对象转换成json
c#将一个对象转换成json class AllyRequestIO { /*//请求随机数 private String random { get; set; } //请求参数 private String iparams { get; set; }*/ public String token { get; set; } public int payType { get; set; } public Decimal amount { get; set; } public String use { get; set; } public String remark { get; set; } public String orgId { get; set; } public long merchantId { get; set; } public String pbucode { get; set; } public String accno { get; set; } public String accname { get; set; } public String bankcode { get; set; } public String ubankno { get; set; } public String cusno { get; set; } public int acctype { get; set; } } AllyRequestIO aio = new AllyRequestIO(); aio.token = "e993ffb0-54a7-4446-8b17-937f1454d214"; aio.payType = 1; aio.amount = (Decimal)111.00; aio.use = "余额充值"; aio.remark = "用户:超级管理员充值余额"; aio.orgId="DDA607C7-C875-4B3A-AA29-4D435F2A4295"; aio.merchantId = 1; aio.pbucode = "TEST"; aio.accno = "6225842255849524451"; aio.accname = "李四"; aio.bankcode = "CCB"; aio.ubankno = "衣冠庙支行"; aio.cusno = "3625"; aio.acctype = 2; 我要将aio转换成json,怎么做?
关于livecharts官网中提供的Features->Events的示例问题?
livecharts示例代码:https://lvcharts.net/App/examples/v1/wpf/Events 我应用于wpf项目中的代码: ScrollableViewModel.cs ``` using LiveCharts; using LiveCharts.Defaults; using LiveCharts.Geared; using System; using System.Collections.Generic; using System.ComponentModel; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Input; namespace WpfApp1.Resources.UserControls.Scrollable { public class ScrollableViewModel : INotifyPropertyChanged { private Func<double, string> _formatter; private Func<double, string> _xformatter; private double _from; private double _to; private double _min; private double _max; public ScrollableViewModel() { DataClickCommand = new MyCommand<ChartPoint> { ExecuteDelegate = p => From = Values.FirstOrDefault().DateTime.Ticks }; var now = DateTime.Now; var trend = -30000d; var l = new List<DateTimePoint>(); var Eventl = new List<VisitsByDateTime>(); var r = new Random(); for (var i = 0; i < 50000; i++) { now = now.AddMilliseconds(100); double xx = Convert.ToDateTime(now).ToOADate(); //每隔100毫秒 l.Add(new DateTimePoint(now, trend)); //每隔一分鐘造一個事件 if (i % 600 == 0) Eventl.Add(new VisitsByDateTime { DateTime = now, Total = (decimal)1 }); if (r.NextDouble() > 0.4) { trend += r.NextDouble() * 10; } else { trend -= r.NextDouble() * 10; } } Formatter = x => new DateTime((long)x).ToString("dd日HH时mm分ss秒fff毫秒"); XFormatter = x => new DateTime((long)x).ToString("dd日HH时mm分"); Values = l.AsGearedValues().WithQuality(Quality.High); EventValues = Eventl.AsGearedValues(); From = DateTime.Now.AddMilliseconds(10000).Ticks; To = DateTime.Now.AddMilliseconds(900000).Ticks; Min = Values.FirstOrDefault().DateTime.Ticks; Max = Values.LastOrDefault().DateTime.Ticks; } public MyCommand<ChartPoint> DataClickCommand { get; set; } public object Mapper { get; set; } //波形 public GearedValues<DateTimePoint> Values { get; set; } //事件 public GearedValues<VisitsByDateTime> EventValues { get; set; } public double From { get { return _from; } set { _from = value; OnPropertyChanged("From"); } } public double To { get { return _to; } set { _to = value; OnPropertyChanged("To"); } } public double Min { get { return _min; } set { _min = value; OnPropertyChanged("Min"); } } public double Max { get { return _max; } set { _max = value; OnPropertyChanged("Max"); } } public Func<double, string> Formatter { get { return _formatter; } set { _formatter = value; OnPropertyChanged("Formatter"); } } public Func<double, string> XFormatter { get { return _xformatter; } set { _xformatter = value; OnPropertyChanged("XFormatter"); } } public event PropertyChangedEventHandler PropertyChanged; protected virtual void OnPropertyChanged(string propertyName = null) { if (PropertyChanged != null) PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } public class MyCommand<T> : ICommand where T : class { public Predicate<T> CanExecuteDelegate { get; set; } public Action<T> ExecuteDelegate { get; set; } public bool CanExecute(object parameter) { return CanExecuteDelegate == null || CanExecuteDelegate((T)parameter); } public void Execute(object parameter) { if (ExecuteDelegate != null) ExecuteDelegate((T)parameter); } public event EventHandler CanExecuteChanged { add { CommandManager.RequerySuggested += value; } remove { CommandManager.RequerySuggested -= value; } } } } ``` ScrollableViewE.xaml ``` <UserControl x:Class="WpfApp1.Resources.UserControls.ScrollableE.ScrollableViewE" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:local="clr-namespace:WpfApp1.Resources.UserControls.ScrollableE" xmlns:lvc="clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf" xmlns:geared="clr-namespace:LiveCharts.Geared;assembly=LiveCharts.Geared" xmlns:scrollable="clr-namespace:WpfApp1.Resources.UserControls.Scrollable" mc:Ignorable="d" d:DesignHeight="450" d:DesignWidth="800"> <UserControl.DataContext> <scrollable:ScrollableViewModel></scrollable:ScrollableViewModel> </UserControl.DataContext> <Grid> <lvc:CartesianChart Name="ScrollChart" DisableAnimations="True" ClipToBounds="True" Zoom="X" DataClick="ChartOnDataClick" Margin="20 10"> <lvc:CartesianChart.Resources> <Style TargetType="lvc:Separator"> <Setter Property="IsEnabled" Value="False"></Setter> </Style> </lvc:CartesianChart.Resources> <lvc:CartesianChart.Series> <geared:GColumnSeries Values="{Binding EventValues}" StrokeThickness="3"/> <geared:GLineSeries Values="{Binding Values}" LineSmoothness="0" StrokeThickness="2" Stroke="#00e701" PointGeometry="{x:Null}" AreaLimit="0"/> </lvc:CartesianChart.Series> <lvc:CartesianChart.AxisX> <lvc:Axis IsMerged="True" LabelFormatter="{Binding XFormatter, Mode=OneTime}" MinValue="{Binding Min, Mode=TwoWay}" MaxValue="{Binding Max, Mode=TwoWay}" Foreground="#fff" FontSize="12" FontWeight="UltraBold"/> </lvc:CartesianChart.AxisX> <lvc:CartesianChart.AxisY> <lvc:Axis ShowLabels="False" /> </lvc:CartesianChart.AxisY> </lvc:CartesianChart> </Grid> </UserControl> ``` ScrollableViewE.cs ``` using LiveCharts; using LiveCharts.Wpf; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; namespace WpfApp1.Resources.UserControls.ScrollableE { /// <summary> /// ScrollableViewE.xaml 的交互逻辑 /// </summary> public partial class ScrollableViewE : UserControl { public ScrollableViewE() { InitializeComponent(); } private void ChartOnDataClick(object sender, ChartPoint p) { Console.WriteLine("[EVENT] You clicked (" + p.X + ", " + p.Y + ")"); } } } ``` 运行截图: ![图片说明](https://img-ask.csdn.net/upload/202001/20/1579513236_276210.png) 问题:当我点击折线图的时候可以进入到ChartOnDataClick方法,但是为什么点击柱状图的时候没反应呢?怎么才能让点击柱状图的时候进入到ChartOnDataClick方法?
MongoDB C# 驱动中结构类型无法反序列化
public class User { public Guid _id { get; set; } public Log L { get; set; } } public struct Log { [MongoDB.Bson.Serialization.Attributes.BsonDateTimeOptions(Kind=DateTimeKind.Local)] public DateTime CreateDateTime { get; set; } } 上述这样的结构在MongoDB C#驱动中无法被反序列化,请教如何结果?
C#测试类怎么写 (急用)???
求C#的测试类(急用) using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { enum Sexkind { Male, Female } class Human { private string no; public string No { get { return no; } set { int y = int.Parse(no.Substring(0, 4)); if (no == null || no.Length != 12) throw new Exception("长度不到十二位"); else if (y > DateTime.Now.Year || y < DateTime.Now.Year - 100) throw new Exception("年份错误"); else no = value; } } public string Name { set; get; } public Sexkind Sex { set; get; } public int count { set; get; } public int Year { get { return int.Parse(no.Substring(0, 4)); } } public string Info { get { return No + "\t" + Name + "\t" + Sex; } } public Human() { count++; } public Human(string no, string name, Sexkind sex) { count++; No = no; Name = name; Sex = sex; } public void Show() { Console.WriteLine(Info); } public void SayHello() { Console.WriteLine("Hello, human!"); } public delegate void State(object sender, string message); public event State OnIdle; public event State OnWork; static void Main(string[] args) { Human hu = new Human("201902211122", "哇哈哈", Sexkind.Male); hu.Show(); hu.SayHello(); } } } }
使用c#生成有2个命名空间的xml
<root xmlns:a="……"> <a:other/> <row xmlns="……"> <rowIndex/> </row> </root> 请问下,现在xml中有2个命名空间,现在我想让row中的节点使用其父节点默认的命名空间,而不是root的a,请问该如何声明啊?我现在序列化出来的xml,其中rowIndex会前面加a 使用的是C#,声明 [XmlElement("HCHX_DATA")] public HCHX_DATA HCHX_DATA { get; set; }
C# 访问redis集群,怎么能够查到所有信息?
使用StackExchange.Redis.dll访问redis,redis环境是集群环境,但是我根据集群环境对外的ip和端口访问获取数据GetDataBase(),然后使用模糊查询的时候,查到的信息不全。这个代码应该怎么实现才能查到想要的所有信息。 其中cacheResultArr的长度为1,我从redis管理工具查到的不只是1条。 private static ConnectionMultiplexer redis; private static readonly object Locker = new object(); private IDatabase db { get; set; } public static ConnectionMultiplexer Manager { get { if (redis == null) { lock (Locker) { if (redis == null || !redis.IsConnected) { redis = GetManager(); } } } return redis; } } private static ConnectionMultiplexer GetManager(string connectionString = null) { if (string.IsNullOrEmpty(connectionString)) { connectionString = ConfigurationManager.AppSettings["redisAddress"]; } return ConnectionMultiplexer.Connect(connectionString); } public void Init() { //redis = ConnectionMultiplexer.Connect(connectString); db = Manager.GetDatabase(); LogInfoHelper.Write("-----初始化,连接Redis-----"); string kpatternAfc = ConfigurationManager.AppSettings["kpatternAfc"]; var script = "return redis.call('keys',@pattern)"; var prepared = LuaScript.Prepare(script); var cacheResult = db.ScriptEvaluate(prepared, new { pattern = kpatternAfc }); if (cacheResult.IsNull) { return; } else { string[] cacheResultArr = (string[])cacheResult; foreach (string key in cacheResultArr) { var entries = db.HashGetAll(key); foreach (var item in entries) { } } } }
C#建立一个数组的问题
建立一个学生类(student),包含姓名,年龄两个字段,为每个字段提供相应的get set属性,要求在属性中保证每个年龄在20-80之间 建立两个构造函数,一个是不带参数的默认构造函数,另一个带两个参数,可以分别为姓名,年龄赋值,最后建立一个长度为3的对象数组, 其中包含三个student对象,用for循环打印student对象的姓名,年龄。 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Student { private string name; private int age; public string Name { get { return name; } set { name = value; } } public int Age { get { return age; } set { if (age <= 80 || age > 20) age = value; else Console.WriteLine("年龄在20-80之间"); } } public Student() { } public Student(string name, int age) { this.name = "zrf"; this.age = 30; } } } 接下来建立数组不会了。C#刚刚入门,求指导,谢谢大家
c#基础做一个简单的银行 只剩下能开户多个能用到其他方法就行了 其他的我都做好了!!!谢谢!
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; ``` namespace Bank { class BankMethods { //创建一个对象组 BankMethods[] banker =new BankMethods[4]; BankMethods[] banker2 = new BankMethods[1]; //名字 private string _name; public string Name { get { return _name; } set { this._name = value; } } //卡号 private string _id; public string Id { get { return _id; } set { this._id = value; } } //名字 private string _pwd; public string Pwd { get { return _pwd; } set { this._pwd = value; } } //余额 private double _balance; public double Balance { get { return _balance; } set { this._balance = value; } } //创建一个老用户的方法 public void Bank() { banker[0] = new BankMethods() { Name = "小红", Id = "123456", Pwd = "123", Balance = 500 }; banker[1] = new BankMethods() { Name = "小明", Id = "123467", Pwd ="123", Balance = 600 }; banker[2] = new BankMethods() { Name = "小黑", Id = "123458", Pwd = "123", Balance = 700 }; banker[3] = new BankMethods() { Name = "小王", Id = "123469", Pwd = "123", Balance = 800 }; foreach (BankMethods b in banker) { b.say(); } } //遍历出这些银行老用户 public void say() { Console.WriteLine("名字是{0},卡号是{1},密码是{2},余额是{3}", this._name, this._id,this._pwd, this._balance); } //创建一个余额增加的方法 public void Increase(double NewMoney) { if (NewMoney > 0) { this._balance += NewMoney; } } //创建一个余额减少的方法 public void Reduce(double NewMoney) { if (NewMoney <= this._balance && NewMoney > 0) { this._balance -= NewMoney; } } //打印提示 public int Print() { Console.WriteLine("===================================================="); Console.WriteLine("==========欢迎进入自助银行系统=========="); Console.WriteLine("请选择:1.转账 2.存款 3.取款 4.查询余额 5.开户 6.退出"); Console.WriteLine("===================================================="); int result = int.Parse(Console.ReadLine()); return result; } //判断卡号和密码是否正确 public BankMethods Judge(string id,string pwd) { foreach (BankMethods judge in banker) { if (judge.Id.Equals(id) && judge.Pwd.Equals(pwd)) { return judge; } } foreach (BankMethods judge2 in banker2) { if (judge2.Id.Equals(id) && judge2.Pwd.Equals(pwd)) { return judge2; } } return null; } //判断卡号是否正确 public BankMethods Judge2(string id) { foreach (BankMethods jude in banker) { if (jude.Id.Equals(id)) { return jude; } } foreach (BankMethods jude2 in banker2) { if (jude2.Id.Equals(id)) { return jude2; } } return null; } //开户 public void OpenBank() { Console.WriteLine("请输入名字"); string name = Console.ReadLine(); Console.WriteLine("请输入密码"); string pwd = Console.ReadLine(); Console.WriteLine("请输入存款金额"); double balance = double.Parse(Console.ReadLine()); Increase(balance); string id = "666666"; this._name = name; this._pwd = pwd; this._id = id; this._balance = balance; Console.WriteLine("开户成功!你的名字是{0},卡号是{1},密码是{2},余额是{3}", this._name, this._id, this._pwd, this._balance); banker2[0] = new BankMethods() { Name=name,Id=id,Pwd=pwd,Balance=balance}; } //取钱 public void DrawMoney() { Console.WriteLine("请输入卡号"); string id = Console.ReadLine(); Console.WriteLine("请输入密码"); string pwd = Console.ReadLine(); BankMethods b = Judge(id, pwd); if (b == null) { Console.WriteLine("输入卡号或密码错误"); } else { Console.WriteLine("请输入取款金额"); double money = double.Parse(Console.ReadLine()); b.Reduce(money); Console.WriteLine("取款成功!余额为:" + b.Balance); } } //存钱 public void Deposit() { Console.WriteLine("请输入卡号"); string id = Console.ReadLine(); BankMethods b = Judge2(id); if (b == null) { Console.WriteLine("此卡号不存在"); } else { Console.WriteLine("请输入存款金额"); double money = double.Parse(Console.ReadLine()); b.Increase(money); Console.WriteLine("存款成功"); } } //转账 public void Transfer() { Console.WriteLine("请输入转账人卡号"); string id = Console.ReadLine(); Console.WriteLine("请输入转账人密码"); string pwd = Console.ReadLine(); BankMethods b = Judge(id, pwd); if (b == null) { Console.WriteLine("输入错误"); } else { Console.WriteLine("请输入收账人卡号"); string id2 = Console.ReadLine(); BankMethods b2 = Judge2(id2); if (b2 == null) { Console.WriteLine("输入错误"); } else { Console.WriteLine("请输入转账金额"); double money = double.Parse(Console.ReadLine()); b.Reduce(money); b2.Increase(money); Console.WriteLine("转账成功!!!"); } } } //查询余额 public void Balances() { Console.WriteLine("请输入卡号"); string id = Console.ReadLine(); Console.WriteLine("请输入密码"); string pwd = Console.ReadLine(); BankMethods b = Judge(id, pwd); if (b == null) { Console.WriteLine("输入错误"); } else { Console.WriteLine("您的余额为:" + b.Balance); } } } class Program { static void Main(string[] args) { //1.转账 2.存款 3.取款 4.查询余额 5.开户 6.退出 BankMethods bank = new BankMethods(); bank.Bank(); do { switch (bank.Print()) { case 1: bank.Transfer(); continue; case 2: bank.Deposit(); continue; case 3: bank.DrawMoney(); continue; case 4: bank.Balances(); continue; case 5: bank.OpenBank(); continue; case 6: break; } break; } while (1 == 1); } } } ```
不懂就问,Appium 小白,在微信切换 webview 时遇到 Original error: unknown error: Failed to get PID for com.tencent.mm:tools
##前置条件: 1.真机 OPPO R11st 2.安卓版本 7.1.1 3.真机webview 66.0.3359.126(chrome浏览器和微信内嵌webview同此版本) 4.appium 1.15.1 ###代码 public static void main(String[] args) throws Exception { //创建配置对象 DesiredCapabilities desiredCapabilities = new DesiredCapabilities(); desiredCapabilities.setCapability("deviceName","OPPO R11st"); //测试平台 desiredCapabilities.setCapability("platformName", "Android"); //安卓系统版本 desiredCapabilities.setCapability("paltformVersion", "7.1.1"); desiredCapabilities.setCapability("appPackage", "com.tencent.mm"); desiredCapabilities.setCapability("appActivity", ".ui.LauncherUI"); //不清除数据启动 desiredCapabilities.setCapability("noReset", "True"); desiredCapabilities.setCapability("recreateChromeDriverSessions","True"); //自动化引擎(解决输入框不能输入的问题) desiredCapabilities.setCapability("automationName", "uiautomator2"); // 支持X5内核应用自动化配置 desiredCapabilities.setCapability("recreateChromeDriverSessions", true); ChromeOptions options = new ChromeOptions(); options.setExperimentalOption("androidProcess", "com.tencent.mm:tools"); desiredCapabilities.setCapability(ChromeOptions.CAPABILITY, options); desiredCapabilities.setCapability("browserName",""); //创建驱动 androidDriver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), desiredCapabilities); //元素超时等待 androidDriver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS); weChat(); //关闭驱动 androidDriver.quit(); } public static void weChat() throws Exception { Thread.sleep(5000); androidDriver.findElementById("com.tencent.mm:id/r_").click(); androidDriver.findElementById("com.tencent.mm:id/m7").sendKeys("接口测试号"); androidDriver.findElementById("com.tencent.mm:id/s7").click(); androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"贷款\")").click(); androidDriver.findElementByAndroidUIAutomator("new UiSelector().text(\"卢贝尔TEST\")").click(); Thread.sleep(15000); Set<String> context = androidDriver.getContextHandles(); for(String contextname : context){ System.out.println(contextname);//打印 if(contextname.equals("WEBVIEW_com.tencent.mm:tools")) androidDriver.context(contextname); } System.out.println(androidDriver.findElementsByXPath("//*").toString()); System.out.println("进来了。。。。。。"); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[2]/div[1]/img").click(); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[1]/div[2]/div[1]/input").sendKeys("13983871447"); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[1]/div[2]/div[2]/div").sendKeys("qwe000111"); androidDriver.findElementByXPath("//*[@id=\"app\"]/div/div[1]/div[3]/input").click(); Thread.sleep(25000); } ##appium详细信息 ###这里可以看到pid是被找到了的 ``` [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '21104' pkg: 'com.tencent.mm:tools' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 21104 997 3907284 381152 efg 0 0000000000 S com.tencent.mm:tools [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm:tools' [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '20267' pkg: 'com.tencent.mm' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 20267 997 3487468 300536 efg 0 0000000000 S com.tencent.mm [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm' [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '20643' pkg: 'com.tencent.mm:appbrand0' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 20643 997 3474560 255204 unk 0 0000000000 S com.tencent.mm:appbrand0 [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm:appbrand0' [2020-01-20 04:08:12][AndroidDriver] Parsed pid: '21040' pkg: 'com.tencent.mm:toolsmp' from [2020-01-20 04:08:12][AndroidDriver] USER PID PPID VSIZE RSS FRZ WCHAN PC NAME [2020-01-20 04:08:12][AndroidDriver] u0_a297 21040 997 3227048 264568 unk 0 0000000000 S com.tencent.mm:toolsmp [2020-01-20 04:08:12][AndroidDriver] Returning process name: 'com.tencent.mm:toolsmp' [2020-01-20 04:08:12][AndroidDriver] Found webviews: ["WEBVIEW_com.tencent.mm:tools","WEBVIEW_com.tencent.mm:appbrand0","WEBVIEW_com.tencent.mm","WEBVIEW_com.tencent.mm:toolsmp"] [2020-01-20 04:08:12][AndroidDriver] Available contexts: ``` ##appium报错信息 ``` [2020-01-20 04:08:12][Chromedriver] Starting MJSONWP Chromedriver session with capabilities: { [2020-01-20 04:08:12][Chromedriver] "desiredCapabilities": { [2020-01-20 04:08:12][Chromedriver] "chromeOptions": { [2020-01-20 04:08:12][Chromedriver] "androidPackage": "com.tencent.mm", [2020-01-20 04:08:12][Chromedriver] "androidUseRunningApp": true, [2020-01-20 04:08:12][Chromedriver] "androidProcess": "com.tencent.mm:tools", [2020-01-20 04:08:12][Chromedriver] "args": [], [2020-01-20 04:08:12][Chromedriver] "extensions": [], [2020-01-20 04:08:12][Chromedriver] "androidDeviceSerial": "8905da57" [2020-01-20 04:08:12][Chromedriver] }, [2020-01-20 04:08:12][Chromedriver] "loggingPrefs": { [2020-01-20 04:08:12][Chromedriver] "browser": "ALL" [2020-01-20 04:08:12][Chromedriver] } [2020-01-20 04:08:12][Chromedriver] } [2020-01-20 04:08:12][Chromedriver] } [2020-01-20 04:08:12][WD Proxy] Matched '/session' to command name 'createSession' [2020-01-20 04:08:12][WD Proxy] Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.tencent.mm","androidUseRunningApp":true,"androidProcess":"com.tencent.mm:tools","args":[],"extensions":[],"androidDeviceSerial":"8905da57"},"loggingPrefs":{"browser":"ALL"}}} [2020-01-20 04:08:14][WD Proxy] Got response with status 200: {"sessionId":"db8120c4243d3b2e3714bb62b5357a5b","status":13,"value":{"message":"unknown error: Failed to get PID for the following process: com.tencent.mm:tools\n (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64)"}} [2020-01-20 04:08:14][WD Proxy] Determined the downstream protocol as 'MJSONWP' [2020-01-20 04:08:14][WD Proxy] The response has an unknown format [2020-01-20 04:08:14][MJSONWP] Matched JSONWP error code 13 to UnknownError [2020-01-20 04:08:14][Chromedriver] Failed to start Chromedriver session: An unknown server-side error occurred while processing the command. Original error: unknown error: Failed to get PID for the following process: com.tencent.mm:tools [2020-01-20 04:08:14][Chromedriver] (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64) [2020-01-20 04:08:14][WD Proxy] Matched '/session' to command name 'createSession' [2020-01-20 04:08:14][WD Proxy] Proxying [POST /session] to [POST http://127.0.0.1:8000/wd/hub/session] with body: {"desiredCapabilities":{"chromeOptions":{"androidPackage":"com.tencent.mm","androidUseRunningApp":true,"androidProcess":"com.tencent.mm:tools","args":[],"extensions":[],"androidDeviceSerial":"8905da57"},"loggingPrefs":{"browser":"ALL"}}} [2020-01-20 04:08:15][WD Proxy] Got response with status 200: {"sessionId":"41893d46f51c7c60c153a16cd7cfe42f","status":13,"value":{"message":"unknown error: Failed to get PID for the following process: com.tencent.mm:tools\n (Driver info: chromedriver=2.40.565498 (ea082db3280dd6843ebfb08a625e3eb905c4f5ab),platform=Windows NT 6.1.7601 SP1 x86_64)"}} [2020-01-20 04:08:15][WD Proxy] Determined the downstream protocol as 'MJSONWP' [2020-01-20 04:08:15][WD Proxy] The response has an unknown format [2020-01-20 04:08:15][MJSONWP] Matched JSONWP error code 13 to UnknownError [2020-01-20 04:08:15][Chromedriver] Failed to start Chromedriver session: An unknown server-side error occurred while processing the command. Original error: unknown error: Failed to get PID for the following process: com.tencent.mm:tools ```
c# 有点复杂的XML报文反序列化
``` <?xml version="1.0" encoding="UTF-8"?> <DBSET> <C N="RTN_RESULT"> <DBSET> <R> <C N="TRAMT">0.00</C> <C N="APP">03</C> </R> </DBSET> </C> <C N="RTN_RECORD">1</C> <DBSET> ``` 这段xml报文要怎么反序列化 我的定义是这样的 ``` [XmlRoot("DBSET)] public class QueryEntity { [XmlElement("C")] public List<C> C{get;set;} } public class C { [XmlAttribute("N")] public string N{get;set;} [XmlText] public string Value{get;set;} } ``` 如果没有RTN_RESULT里的内容倒是可以 现在那个<C N>里又有list 又有string 我那个Value要怎么定义 跪求大神要怎么做 指条明路 我要怎么定义反序列化后的类
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
英特尔不为人知的 B 面
从 PC 时代至今,众人只知在 CPU、GPU、XPU、制程、工艺等战场中,英特尔在与同行硬件芯片制造商们的竞争中杀出重围,且在不断的成长进化中,成为全球知名的半导体公司。殊不知,在「刚硬」的背后,英特尔「柔性」的软件早已经做到了全方位的支持与支撑,并持续发挥独特的生态价值,推动产业合作共赢。 而对于这一不知人知的 B 面,很多人将其称之为英特尔隐形的翅膀,虽低调,但是影响力却不容小觑。 那么,在...
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
为啥国人偏爱Mybatis,而老外喜欢Hibernate/JPA呢?
关于SQL和ORM的争论,永远都不会终止,我也一直在思考这个问题。昨天又跟群里的小伙伴进行了一番讨论,感触还是有一些,于是就有了今天这篇文。 声明:本文不会下关于Mybatis和JPA两个持久层框架哪个更好这样的结论。只是摆事实,讲道理,所以,请各位看官勿喷。 一、事件起因 关于Mybatis和JPA孰优孰劣的问题,争论已经很多年了。一直也没有结论,毕竟每个人的喜好和习惯是大不相同的。我也看...
白话阿里巴巴Java开发手册高级篇
不久前,阿里巴巴发布了《阿里巴巴Java开发手册》,总结了阿里巴巴内部实际项目开发过程中开发人员应该遵守的研发流程规范,这些流程规范在一定程度上能够保证最终的项目交付质量,通过在时间中总结模式,并推广给广大开发人员,来避免研发人员在实践中容易犯的错误,确保最终在大规模协作的项目中达成既定目标。 无独有偶,笔者去年在公司里负责升级和制定研发流程、设计模板、设计标准、代码标准等规范,并在实际工作中进行...
SQL-小白最佳入门sql查询一
不要偷偷的查询我的个人资料,即使你再喜欢我,也不要这样,真的不好;
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
【图解经典算法题】如何用一行代码解决约瑟夫环问题
约瑟夫环问题算是很经典的题了,估计大家都听说过,然后我就在一次笔试中遇到了,下面我就用 3 种方法来详细讲解一下这道题,最后一种方法学了之后保证让你可以让你装逼。 问题描述:编号为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编号为 1 的士兵开始依次报数(1,2,3…这样依次报),数到 m 的 士兵会被杀死出列,之后的士兵再从 1 开始报数。直到最后剩下一士兵,求这个士兵的编号。 1、方...
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
如何防止抄袭PCB电路板
目录 1、抄板是什么 2、抄板是否属于侵权 3、如何防止抄板 1、抄板是什么 抄板也叫克隆或仿制,是对设计出来的PCB板进行反向技术研究;目前全新的定义:从狭义上来说,抄板仅指对电子产品电路板PCB文件的提取还原和利用文件进行电路板克隆的过程;从广义上来说,抄板不仅包括对电路板文件提取、电路板克隆、电路板仿制等技术过程,而且包括对电路板文件进行修改(即改板)、对电子产品外形模具进行三维...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
相关热词 c# clr dll c# 如何orm c# 固定大小的字符数组 c#框架设计 c# 删除数据库 c# 中文文字 图片转 c# 成员属性 接口 c#如何将程序封装 16进制负数转换 c# c#练手项目
立即提问